É possível criar um cluster do Dataproc com uma imagem personalizada que inclui os pacotes pré-instalados. Nesta página, mostramos como criar uma imagem personalizada e instalá-la em um cluster do Dataproc.
Considerações e limitações de uso
Ciclo de vida da imagem personalizada:para garantir que os clusters recebam as atualizações de serviço e correções de bugs mais recentes, a criação de clusters com uma imagem personalizada é limitada a 365 dias a partir da data de criação da imagem personalizada. Os clusters criados com uma imagem personalizada podem ser executados indefinidamente.
Talvez seja necessário usar a automação se você quiser criar clusters com uma imagem personalizada específica por um período maior que 365 dias. Para mais informações, consulte Criar um cluster com uma imagem personalizada expirada.
Somente Linux:as instruções neste documento se aplicam apenas a sistemas operacionais Linux. Outros sistemas operacionais poderão ser compatíveis com versões futuras do Dataproc.
Imagens de base compatíveis:as criações de imagens personalizadas exigem uma imagem de base do Dataproc. As seguintes imagens de base são compatíveis: Debian, Rocky Linux e Ubuntu.
- Disponibilidade de imagens de base:novas imagens anunciadas nas Notas de lançamento do Dataproc não estão disponíveis para uso como base para imagens personalizadas até uma semana após a data do anúncio.
Usar componentes opcionais:
Imagens de base
2.2
e anteriores: por padrão, todos os componentes opcionais do Dataproc (pacotes e configurações do SO) são instalados na imagem personalizada. É possível personalizar as versões e configurações do pacote do SO.Imagens de base
2.3
e mais recentes: somente os componentes opcionais selecionados são instalados na imagem personalizada. Consulte a flaggenerate_custom_image.py
--optional-components.
Independente da imagem de base usada para sua imagem personalizada, ao criar o cluster, é necessário listar ou selecionar componentes opcionais.
Exemplo: comando de criação de cluster da Google Cloud CLI:
gcloud dataproc clusters create CLUSTER_NAME --image=CUSTOM_IMAGE_URI \ --optional-components=COMPONENT_NAME \ ... other flags
Se o nome do componente não for especificado quando você criar o cluster, o componente opcional, incluindo configurações e pacotes personalizados do SO, será excluído.
Como usar imagens personalizadas hospedadas:se você usa uma imagem personalizada hospedada em outro projeto, a conta de serviço do agente de serviço do Dataproc no seu projeto precisa ter a permissão
compute.images.get
na imagem no projeto host. Para isso, conceda o papelroles/compute.imageUser
na imagem hospedada à conta de serviço do agente de serviço do Dataproc do seu projeto. Consulte Como compartilhar imagens personalizadas em uma organização.Usar segredos de MOK (chave do proprietário da máquina) de inicialização segura:para ativar a inicialização segura com sua imagem personalizada do Dataproc, faça o seguinte:
Ative a API Secret Manager (
secretmanager.googleapis.com
. O Dataproc gera e gerencia um par de chaves usando o serviço Secret Manager.Adicione a flag
--service-account="SERVICE_ACCOUNT"
ao comandogenerate_custom_image.py
ao gerar uma imagem personalizada. Observação: é preciso conceder à conta de serviço o papel de Leitor do Secret Manager (roles/secretmanager.viewer
) no projeto e o papel de Acessador do Secret Manager (roles/secretmanager.secretAccessor
) nos secrets públicos e privados.Para mais informações com exemplos, consulte o
README.md
e outros arquivos no diretório examples/secure-boot do repositórioGoogleCloudDataproc/custom-images
no GitHub.Para desativar a inicialização segura:por padrão, os scripts de imagem personalizada do Dataproc geram e gerenciam um par de chaves usando o Secret Manager quando executados em um cluster do Dataproc. Se você não quiser usar a inicialização segura com sua imagem personalizada, inclua
--trusted-cert=""
(valor de flag vazio) no comandogenerate_custom_image.py
ao gerar a imagem personalizada.
Antes de começar
Configure o projeto antes de gerar a imagem personalizada.
Criar o projeto
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Instale o Python 3.11 ou versão mais recente.
- Prepare um script de personalização que instale pacotes personalizados e/ou
atualize configurações, por exemplo:
#! /usr/bin/bash apt-get -y update apt-get install python-dev apt-get install python-pip pip install numpy
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
-
In the Get started section, do the following:
- Enter a globally unique name that meets the bucket naming requirements.
- To add a
bucket label,
expand the Labels section ( ),
click add_box
Add label, and specify a
key
and avalue
for your label.
-
In the Choose where to store your data section, do the following:
- Select a Location type.
- Choose a location where your bucket's data is permanently stored from the Location type drop-down menu.
- If you select the dual-region location type, you can also choose to enable turbo replication by using the relevant checkbox.
- To set up cross-bucket replication, select
Add cross-bucket replication via Storage Transfer Service and
follow these steps:
Set up cross-bucket replication
- In the Bucket menu, select a bucket.
In the Replication settings section, click Configure to configure settings for the replication job.
The Configure cross-bucket replication pane appears.
- To filter objects to replicate by object name prefix, enter a prefix that you want to include or exclude objects from, then click Add a prefix.
- To set a storage class for the replicated objects, select a storage class from the Storage class menu. If you skip this step, the replicated objects will use the destination bucket's storage class by default.
- Click Done.
-
In the Choose how to store your data section, do the following:
- Select a default storage class for the bucket or Autoclass for automatic storage class management of your bucket's data.
- To enable hierarchical namespace, in the Optimize storage for data-intensive workloads section, select Enable hierarchical namespace on this bucket.
- In the Choose how to control access to objects section, select whether or not your bucket enforces public access prevention, and select an access control method for your bucket's objects.
-
In the Choose how to protect object data section, do the
following:
- Select any of the options under Data protection that you
want to set for your bucket.
- To enable soft delete, click the Soft delete policy (For data recovery) checkbox, and specify the number of days you want to retain objects after deletion.
- To set Object Versioning, click the Object versioning (For version control) checkbox, and specify the maximum number of versions per object and the number of days after which the noncurrent versions expire.
- To enable the retention policy on objects and buckets, click the Retention (For compliance) checkbox, and then do the following:
- To enable Object Retention Lock, click the Enable object retention checkbox.
- To enable Bucket Lock, click the Set bucket retention policy checkbox, and choose a unit of time and a length of time for your retention period.
- To choose how your object data will be encrypted, expand the Data encryption section (Data encryption method. ), and select a
- Select any of the options under Data protection that you
want to set for your bucket.
-
In the Get started section, do the following:
- Click Create.
--image-name
: o nome da saída da imagem personalizada.--dataproc-version
: a versão da imagem do Dataproc a ser usada na imagem personalizada. Especifique a versão no formatox.y.z-os
oux.y.z-rc-os
, por exemplo, "2.0.69-debian10".--customization-script
: um caminho local para o script que a ferramenta vai executar para instalar seus pacotes personalizados ou realizar outras personalizações. Esse script é executado como um script de inicialização do Linux apenas na VM temporária usada para criar a imagem personalizada. Especifique um script de inicialização diferente para outras ações de inicialização que quiser executar ao criar um cluster com sua imagem personalizada.Imagens entre projetos:se a imagem personalizada for usada para criar clusters em projetos diferentes, poderá ocorrer um erro devido ao cache de comandos
gcloud
ougsutil
armazenado na imagem. Para evitar esse problema, inclua o comando a seguir no script de personalização para limpar as credenciais armazenadas em cache.rm -r /root/.gsutil /root/.config/gcloud
--zone
: a zona do Compute Engine em quegenerate_custom_image.py
vai criar uma VM temporária para ser usada na criação da imagem personalizada.--gcs-bucket
: um URI, no formatogs://BUCKET_NAME
, que aponta para seu bucket do Cloud Storage.generate_custom_image.py
grava arquivos de registro nesse bucket.--family
: a família da imagem personalizada. As famílias de imagens são usadas para agrupar imagens semelhantes e podem ser usadas ao criar um cluster como um ponteiro para a imagem mais recente na família. Por exemplo,custom-2-2-debian12
.--no-smoke-test
: esta é uma sinalização opcional que desativa o teste de fumaça da imagem personalizada recém-criada. Ele cria um cluster de teste do Dataproc com a imagem recém-criada, executa um pequeno job e exclui o cluster no final do teste. Por padrão, ele é executado para verificar se a imagem personalizada recém-criada pode criar um cluster funcional do Dataproc. Desativar essa etapa usando a flag--no-smoke-test
acelera o processo de criação da imagem personalizada, mas o uso dela não é recomendado.--subnet
: a sub-rede a ser usada para criar a VM que cria a imagem personalizada do Dataproc. Se o projeto fizer parte de uma VPC compartilhada, especifique o URL completo da sub-rede no seguinte formato:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
.--optional-components
: essa flag só está disponível ao usar versões2.3
e mais recentes da imagem de base. Uma lista de componentes opcionais, como SOLR, RANGER, TRINO, DOCKER, FLINK, HIVE_WEBHCAT, ZEPPELIN, HUDI, ICEBERG e PIG (disponível como um componente opcional nas versões de imagem2.3
e mais recentes), para instalar na imagem.Exemplo: comando de criação de cluster da Google Cloud CLI:
gcloud dataproc clusters create CLUSTER_NAME --image=CUSTOM_IMAGE_URI \ --optional-components=COMPONENT_NAME \ ... other flags
Extraia o rótulo
goog-dataproc-version
da imagem de base do Dataproc usada para criar a imagem personalizada.gcloud compute images describe ${BASE_DATAPROC_IMAGE} \ --project cloud-dataproc \ --format="value(labels.goog-dataproc-version)"
Defina o rótulo na imagem personalizada.
gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
- URI completo:
https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
- URI parcial:
projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
- Nome curto: CUSTOM_IMAGE_NAME
- URI completo:
https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
- URI parcial:
projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME
- Abra a página Compute Engine → Imagens no console do Google Cloud e clique no nome da imagem.
Para limitar o número de imagens exibidas, insira uma consulta no campo
filter images
. - A página Detalhes das imagens é aberta. Clique em
REST equivalente.
- A resposta REST lista informações adicionais sobre a imagem, incluindo o
selfLink
, que é o URI da imagem.{ ... "name": "my-custom-image", "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME", "sourceDisk": ..., ... }
- Abra a página Criar um cluster do Dataproc. O painel Configurar cluster está selecionado.
- Na seção Controle de versão, clique em Alterar. Selecione a guia Imagem personalizada, escolha a imagem personalizada a ser usada no cluster do Dataproc e clique em Selecionar. As VMs do cluster serão provisionadas com a imagem personalizada selecionada.
No script de personalização de imagens personalizadas, crie um arquivo
dataproc.custom.properties
em/etc/google-dataproc
e defina os valores da propriedade do cluster no arquivo.- Arquivo
dataproc.custom.properties
de amostra:
dataproc.conscrypt.provider.enable=VALUE dataproc.logging.stackdriver.enable=VALUE
- Exemplo de snippet de criação de arquivo de script de personalização para modificar duas propriedades de cluster:
cat <<EOF >/etc/google-dataproc/dataproc.custom.properties dataproc.conscrypt.provider.enable=true dataproc.logging.stackdriver.enable=false EOF
- Arquivo
Tente criar um cluster do Dataproc com uma imagem personalizada expirada ou uma imagem personalizada que expire em 10 dias.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --region=REGION \ ... other flags
A CLI gcloud vai emitir uma mensagem de erro que inclui o nome da propriedade
dataproc:dataproc.custom.image.expiration.token
do cluster e o valor do token.Use a CLI gcloud para criar o cluster do Dataproc novamente, adicionando o TOKEN_VALUE copiado como uma propriedade do cluster.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \ --region=REGION \ ... other flags
crie um bucket do Cloud Storage no seu projeto
Gerar uma imagem personalizada
Você usa generate_custom_image.py, um programa Python, para criar uma imagem personalizada do Dataproc.
Como funciona
O programa generate_custom_image.py
inicia uma instância de VM temporária do Compute Engine com a imagem de base do Dataproc especificada e executa o script de personalização dentro da instância de VM para instalar pacotes personalizados e/ou atualizar configurações. Depois da conclusão da instalação, o script de personalização encerra a instância de VM e cria uma imagem personalizada do Dataproc a partir do disco da instância. Depois da criação da imagem personalizada, a VM temporária é excluída. A imagem personalizada é salva e pode ser usada para criar clusters do Dataproc.
O programa generate_custom_image.py
usa a CLI gcloud
para executar fluxos de trabalho de várias etapas no Compute Engine.
Executar o código
Para bifurcar ou clonar arquivos no GitHub, acesse Imagens personalizadas do Dataproc.
Em seguida, execute o script generate_custom_image.py
para que o Dataproc
gere e salve sua imagem personalizada.
python3 generate_custom_image.py \ --image-name=CUSTOM_IMAGE_NAME \ [--family=CUSTOM_IMAGE_FAMILY_NAME] \ --dataproc-version=IMAGE_VERSION \ --customization-script=LOCAL_PATH \ --zone=ZONE \ --gcs-bucket=gs://BUCKET_NAME \ [--no-smoke-test]
Sinalizadores obrigatórios
Para ver uma lista de flags opcionais disponíveis, consulte Argumentos opcionais no GitHub.
Se generate_custom_image.py
for bem-sucedido, o imageURI
da imagem personalizada será
mostrado na saída da janela do terminal (o imageUri
completo é mostrado em negrito abaixo):
... managedCluster: clusterName: verify-image-20180614213641-8308a4cd config: gceClusterConfig: zoneUri: ZONE masterConfig: imageUri: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME ... INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME INFO:__main__: ##################################################################### WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME' WILL EXPIRE ON 2018-07-14 21:35:44.133000. #####################################################################
Rótulos de versão de imagem personalizados (uso avançado)
Ao usar a ferramenta de imagem personalizada padrão do Dataproc, ela define um rótulo goog-dataproc-version
na
imagem personalizada criada. O rótulo reflete os recursos e protocolos de recursos usados pelo
Dataproc para gerenciar o software na imagem.
Uso avançado: se você usa seu próprio processo para criar uma imagem personalizada do Dataproc, adicione o rótulo goog-dataproc-version
manualmente a ela, conforme mostrado a seguir:
Use uma imagem personalizada
Você especifica a imagem personalizada ao criar um cluster do Dataproc. A imagem personalizada é salva em Imagens do Cloud Compute e é válida por 365 dias para a criação de um cluster do Dataproc. Para informações sobre como usar uma imagem após a data de expiração, consulte Criar um cluster com uma imagem personalizada expirada.
URI de imagem personalizada
É possível transferir o imageUri
da imagem personalizada para a operação de criação do cluster.
Esse URI pode ser especificado de três maneiras:
As imagens personalizadas também podem ser especificadas pelo URI da família, que sempre escolhe a imagem mais recente dentro da família de imagens.
Encontrar o URI da imagem personalizada
Google Cloud CLI
Execute o comando a seguir para listar os nomes das suas imagens personalizadas.
gcloud compute images list
Transmita o nome da imagem personalizada para o seguinte comando para listar o URI (selfLink
) dela.
gcloud compute images describe custom-image-name
Snippet de saída:
... name: CUSTOM_IMAGE_NAME selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME ...
Console
Criar um cluster com uma imagem personalizada
Crie um cluster usando a CLI gcloud, a API Dataproc ou o consoleGoogle Cloud .
CLI da gcloud
Crie um cluster do Dataproc com uma imagem personalizada usando o comando dataproc clusters create
com a flag --image
.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM_IMAGE_URI \ --region=REGION \ ... other flags
API REST
Crie um cluster com uma imagem personalizada especificando o URI dela no campo InstanceGroupConfig.imageUri com os objetos masterConfig
, workerConfig
e, se aplicável, secondaryWorkerConfig
incluídos em uma solicitação de API cluster.create.
Exemplo: uma solicitação REST para criar um cluster padrão do Dataproc (um mestre, dois nós de trabalho) com uma imagem personalizada.
POST /v1/projects/PROJECT_ID/regions/REGION/clusters/ { "clusterName": "CLUSTER_NAME", "config": { "masterConfig": { "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME" }, "workerConfig": { "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME" } } }
Console
Substituir propriedades do cluster do Dataproc por uma imagem personalizada
É possível usar imagens personalizadas para substituir propriedades de cluster definidas durante a criação do cluster. Se você criar um cluster com uma imagem personalizada, e a operação de criação do cluster definir propriedades com valores diferentes daqueles definidos pela imagem personalizada, os valores de propriedade definidos pela imagem personalizada terão precedência.
Para definir as propriedades do cluster com sua imagem personalizada:
Criar um cluster com uma imagem personalizada expirada
Por padrão, as imagens personalizadas expiram em 365 dias após a data de criação. É possível criar um cluster com uma imagem personalizada expirada seguindo estas etapas.
dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
Copie a string TOKEN_VALUE para a área de transferência.
É necessário que a criação do cluster, com a imagem personalizada, seja bem-sucedida.