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.
  • As criações de imagens personalizadas requerem uma imagem de base do Dataproc. No momento, as imagens base do Debian e do Ubuntu são compatíveis.

Antes de começar

Criar o projeto

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página do seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

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

  4. Ative as APIs Dataproc API, Compute Engine API, and Cloud Storage.

    Ative as APIs

  5. Instale e inicialize o SDK do Cloud..
  6. Instale o Python 2.7 ou versão posterior.
  7. 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. No Console do Cloud, acesse a página Navegador do Cloud Storage.

    Acessar a página "Navegador do Cloud Storage"

  2. Clique em Criar bucket.
  3. Na caixa de diálogo Criar bucket, especifique os seguintes atributos.
  4. 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 o gcloud (padrão) 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.

python generate_custom_image.py \
    --image-name custom_image_name \
    [--family custom_image_family_name] \
    --dataproc-version Dataproc version (example: "1.5.10-debian10") \
    --customization-script local path to your custom script \
    --zone Compute Engine zone to use for the location of the temporary VM \
    --gcs-bucket URI (gs://bucket-name) of a Cloud Storage bucket in your project \
    [--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: "1.5.10-debian10", "1.5.10-ubuntu18", "1.5.0-RC10-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.

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

Se o comando gcloud for bem-sucedido, o imageURI da imagem personalizada será listado 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,...]

Usar 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é 60 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/custom-image-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
  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 a página Compute Engine → Imagens no Console do 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/my-project-id/global/images/my-custom-image",
      "sourceDisk": ...,
      ...
    }
    

Como 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

É 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/global/clusters/
{
  "clusterName": "custom-name",
  "config": {
    "masterConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    },
    "workerConfig": {
      "imageUri": "projects/project-id/global/images/custom-image-name"
    }
  }
}
  

Console

É possível criar um cluster que use uma imagem personalizada na página do Dataproc [Criar um cluster](https://console.cloud.google.com/dataproc/clustersAdd) no Console do Cloud.
  1. Abra opções avançadas na parte inferior do formulário.
  2. Na seção Imagem, clique em Alterar.
  3. 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.

Como criar um cluster com uma imagem personalizada expirada

Por padrão, as imagens personalizadas expiram em 60 dias após a 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 ferramenta gcloud emitirá uma mensagem de erro que inclui o nome da propriedade dataproc:dataproc.custom.image.expiration.token do cluster e o valor do token.

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

  3. Use a ferramenta gcloud para criar o cluster do Dataproc novamente, adicionando o "valor do token" copiado acima 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 ...
    

É necessário que a criação do cluster, com a imagem personalizada, seja bem-sucedida.