Os clusters do Dataproc podem ser provisionados com uma imagem personalizada que inclui os pacotes pré-instalados de um usuário. Nas etapas a seguir, saiba como criar e instalar uma imagem personalizada em um cluster do Dataproc.
Observações:
- As instruções neste documento aplicam-se apenas aos sistemas operacionais Linux. Outros sistemas operacionais poderão ser compatíveis com versões futuras do Dataproc.
- As criações de imagens personalizadas exigem a partir de uma imagem de base do Dataproc. As imagens de base do Debian, do Rocky Linux e do Ubuntu são compatíveis.
- Como usar componentes opcionais: por padrão, as imagens personalizadas herdam todas as
Componentes opcionais do Dataproc
(Pacotes e configs do SO) com base nas imagens de base, é possível
personalizar as versões e configs do pacote do SO padrão, mas você precisa especificar
o nome do componente opcional ao criar o cluster (por exemplo, executando o
comando
gcloud dataproc clusters create --optional-components=COMPONENT_NAME
: consulte Como adicionar componentes opcionais. Se o nome do componente não for especificado quando você criar o cluster, o componente (incluindo configurações e pacotes personalizados do SO) será excluído.
Antes de começar
Crie o projeto
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Dataproc API, Compute Engine API, and Cloud Storage.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Dataproc API, Compute Engine API, and Cloud Storage.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Instale o Python 3.11+
- 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
Criar um bucket do Cloud Storage no projeto
- No console do Cloud, acesse a página Buckets do Cloud Storage.
- Clique em Criar bucket.
- Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima
etapa, clique em Continuar.
- Em Nomear o bucket, insira um nome que atenda aos requisitos de nomenclatura de bucket.
-
Em Escolha um local para armazenar seus dados, faça o seguinte:
- Selecione uma opção de Tipo de local.
- Escolha uma opção de Local.
- Em Escolher uma classe de armazenamento padrão para seus dados, selecione uma classe de armazenamento.
- Em Escolha como controlar o acesso a objetos, selecione uma opção de Controle de acesso.
- Em Configurações avançadas (opcional), especifique um método de criptografia, uma política de retenção ou rótulos de bucket.
- Clique em Criar.
Gerar uma imagem personalizada
Você usará generate_custom_image.py, um programa Python para criar uma imagem personalizada do Dataproc.
Como funciona
O programa generate_custom_image.py
lança 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 nas Imagens personalizadas do Dataproc.
Em seguida, execute o programa 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
--image-name
: o nome da saída da imagem personalizada. Observação: o nome da imagem precisa corresponder à regex[a-z](?:[-a-z0-9]{0,61}[a-z0-9])
. Por exemplo, sem sublinhados ou espaços, com menos de 64 caracteres.--dataproc-version
: a versão da imagem do Dataproc a ser usada na imagem personalizada. Especifique a versão no formato "x.y.z-os" ou "x.y.z-rc-os", por exemplo, "2.0.69-debian10".--customization-script
: um caminho local para o script que a ferramenta executará para instalar seus pacotes personalizados ou executar outras personalizações. Observe que esse script é executado apenas na VM temporária usada para criar a imagem personalizada. Especifique um script de inicialização diferente para qualquer outra ação de inicialização que quiser executar ao criar um cluster com sua imagem personalizada.--zone
: a zona do Compute Engine em quegenerate_custom_image.py
criará uma VM temporária a ser usada para criar a imagem personalizada.--gcs-bucket
: um URI, no formatogs://BUCKET_NAME
, que aponta para o bucket do Cloud Storage criado em Criar um bucket do Cloud Storage no projeto.generate_custom_image.py
gravará arquivos de registro nesse bucket.
Sinalizações opcionais
--family
: a família da imagem. 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-1-5-debian10".--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 sinalização--no-smoke-test
agilizará 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
.
Para uma lista de outras sinalizações opcionais, consulte Argumentos opcionais (link em inglês) no GitHub.
Se generate_custom_image.py
for bem-sucedido, o imageURI
da imagem personalizada será listado na saída da janela do terminal (o imageUri
completo é mostrado abaixo em negrito):
... 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 para usuários avançados
Ao usar a ferramenta de imagem personalizada padrão do Dataproc,
ela define automaticamente um rótulo goog-dataproc-version
obrigatório na
imagem personalizada criada. O rótulo reflete os recursos e protocolos de recursos usados pelo
Dataproc para gerenciar o software na imagem.
Os usuários avançados que usam o próprio processo para criar uma imagem personalizada do Dataproc precisam adicionar o rótulo manualmente a ela, conforme mostrado a seguir:
Extraia o rótulo
goog-dataproc-version
da imagem 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 da imagem personalizada.
gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
Usar uma imagem personalizada
Você especifica a imagem personalizada ao criar um cluster do Dataproc. Uma imagem personalizada é salva em Imagens do Cloud Compute e é válida para criar um cluster do Dataproc por 365 dias a partir da data de criação. Consulte Como criar um cluster com uma imagem personalizada expirada para usar uma imagem personalizada após a data de validade de 365 dias.
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:
- 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
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.
- 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
Como encontrar o URI da imagem personalizada
Comando gcloud
Execute o seguinte comando gcloud
para listar os nomes das suas imagens personalizadas:
gcloud compute images list
Transmita o nome da imagem personalizada para o seguinte comando gcloud
para listar o URI (selfLink
) da imagem personalizada:
gcloud compute images describe custom-image-name
... name: CUSTOM_IMAGE_NAME selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME ...
Console
- 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 na caixa de texto do filtro de imagens
- Abra a página "Detalhes de imagem". Clique em REST equivalente.
- A resposta REST lista outras informações sobre a imagem, incluindo
selfLink
, que é o URI da imagem.{ ... "name": "my-custom-image", "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME", "sourceDisk": ..., ... }
Criar um cluster com uma imagem personalizada
É possível criar um cluster com nós mestres e de trabalho que usam uma imagem personalizada com a ferramenta de linha de comando gcloud
, a API Dataproc ou o console do Google Cloud.
Comando gcloud
É possível criar um cluster do Dataproc com uma imagem personalizada usando o comando dataproc clusters create com a sinalização--image
.
Exemplo:
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 da imagem personalizada no campo InstanceGroupConfig.imageUri e os objetosmasterConfig
e workerConfig
e, se aplicável, o objeto secondaryWorkerConfig
incluído em uma solicitação de API cluster.create.
Exemplo: solicitação REST para criar um cluster padrão do Dataproc (um mestre e 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
- No console do Google Cloud, 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".
Ao enviar o formulário Criar um cluster, as VMs do cluster são provisionadas com a imagem personalizada selecionada.
Substituir as propriedades do cluster do Dataproc com uma imagem personalizada
É possível usar imagens personalizadas para substituir qualquer propriedade de cluster definida durante a criação do cluster. Se um usuário criar um cluster com sua imagem personalizada, mas definir propriedades de cluster diferentes daquelas definidas com a imagem personalizada, as configurações de propriedade do cluster de imagem personalizada terão precedência.
Para definir as propriedades do cluster com sua imagem personalizada:
- 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.- Exemplo de conteúdo de arquivo
dataproc.custom.properties
:dataproc.conscrypt.provider.enable=VALUE dataproc.logging.stackdriver.enable=VALUE
- Exemplo de conteúdo de arquivo
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
Como criar um cluster com uma imagem personalizada expirada
Por padrão, as imagens personalizadas expiram 365 dias após a data de criação. É possível criar um cluster com uma imagem personalizada expirada seguindo estas etapas.
Tente criar um cluster do Dataproc com uma imagem personalizada expirada ou uma imagem personalizada que expira em 10 dias.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --region=REGION \ ... other flags ...
A CLI gcloud emitirá uma mensagem de erro que inclui o nome da propriedade
dataproc:dataproc.custom.image.expiration.token
e o valor do token do cluster.dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
Copie a string "valor do token" para a área de transferência.Use a CLI gcloud para criar o cluster do Dataproc novamente, adicionando o "valor do token" copiado como uma propriedade de cluster.
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \ --region=REGION \ ... other flags ...
É necessário que a criação do cluster, com a imagem personalizada, seja bem-sucedida.