Criar uma imagem personalizada do Dataproc

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.
  • Os builds de imagens personalizadas exigem começar com uma imagem de base do Dataproc ( Imagens de base do Debian, do Rocky Linux e do Ubuntu têm suporte).
  • 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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  9. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Instale o Python 3.11+
  13. 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

  1. In the Google Cloud console, go to the Cloud Storage Buckets page.

    Go to Buckets page

  2. Click Create bucket.
  3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
    • For Name your bucket, enter a name that meets the bucket naming requirements.
    • For Choose where to store your data, do the following:
      • Select a Location type option.
      • Select a Location option.
    • For Choose a default storage class for your data, select a storage class.
    • For Choose how to control access to objects, select an Access control option.
    • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
  4. Click Create.

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 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 em "x.y.z-os" ou "x.y.z-rc-os" formato, 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 que generate_custom_image.py criará uma VM temporária a ser usada para criar a imagem personalizada.
  • --gcs-bucket: um URI, no formato gs://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 faz parte uma VPC compartilhada, especifique o URL completo da sub-rede neste formato: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Para uma lista de sinalizações opcionais adicionais, consulte Argumentos opcionais no GitHub.

Se generate_custom_image.py for bem-sucedido, o imageURI da imagem personalizada listada 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 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:

  1. 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)"
    

  2. Defina o rótulo na imagem personalizada.

    gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
    

Use uma imagem personalizada

Você especifica a imagem personalizada ao criar um cluster do Dataproc. A imagem personalizada será salva em Imagens do Cloud Compute e poderá criar um cluster do Dataproc por até 365 dias a partir da data de criação dela. Para informações sobre como usar uma imagem após a data de validade, consulte Como 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:

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. URI parcial: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. 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.

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
  2. 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

  1. Abra o 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
  2. Abra a página "Detalhes de imagem". Clique em REST equivalente.
  3. 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": ...,
      ...
    }
    

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 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

É possível criar um cluster com uma imagem personalizada especificando o URI no campo InstanceGroupConfig.imageUri com os objetos masterConfig, workerConfig e, se aplicável, secondaryWorkerConfig incluído 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

  1. No console do Google Cloud, abra o Dataproc Criar um cluster página. O painel "Configurar cluster" está selecionado.
  2. 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:

  1. 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 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 em 365 dias a partir da data de criação. É possível criar um cluster com uma imagem personalizada expirada seguindo estas etapas.

  1. 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 ...
    

  2. A CLI gcloud emitirá uma mensagem de erro que inclui o nome da propriedade do cluster dataproc:dataproc.custom.image.expiration.token e valor do token.

    dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
    
    Copie o "valor do token". para a área de transferência.

  3. Use a CLI gcloud para criar o cluster do Dataproc outra vez adicionar o "valor do token" 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.