Crie uma imagem personalizada do Dataproc

Pode criar um cluster do Dataproc com uma imagem personalizada que inclua os seus pacotes pré-instalados. Esta página mostra como criar uma imagem personalizada e instalá-la num cluster do Dataproc.

Considerações e limitações de utilização

  • Tempo de vida da imagem personalizada: para garantir que os clusters recebem as atualizações de serviços e as correções de erros mais recentes, a criação de clusters com uma imagem personalizada está limitada a 365 dias a partir da data de criação da imagem personalizada. Tenha em atenção que os clusters existentes criados com uma imagem personalizada podem ser executados indefinidamente.

    Pode ter de usar a automatização se quiser criar clusters com uma imagem personalizada específica durante um período superior a 365 dias. Para mais informações, consulte o artigo Crie um cluster com uma imagem personalizada expirada.

  • Apenas para Linux: as instruções neste documento aplicam-se apenas a sistemas operativos Linux. Outros sistemas operativos podem ser suportados em futuras versões do Dataproc.

  • Imagens de base suportadas: as compilações de imagens personalizadas têm de começar com uma imagem de base do Dataproc. As seguintes imagens de base são suportadas: Debian, Rocky Linux e Ubuntu.

    • Disponibilidade de imagens base: as novas imagens anunciadas nas notas de lançamento do Dataproc não estão disponíveis para utilização como base para imagens personalizadas até uma semana após a data do respetivo anúncio.
  • Usar componentes opcionais:

    Independentemente da imagem base usada para a sua imagem personalizada, quando criar o cluster, tem de listar ou selecionar componentes opcionais.

    Exemplo: comando de criação de clusters da CLI gcloud do Google Cloud:

    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 criar o cluster, o componente opcional, incluindo quaisquer pacotes e configurações do SO personalizados, é eliminado.

  • Usar imagens personalizadas alojadas: se usar uma imagem personalizada alojada noutro projeto, a conta de serviço do agente do serviço Dataproc no seu projeto tem de ter autorização compute.images.get na imagem no projeto anfitrião. Pode conceder esta autorização atribuindo a função roles/compute.imageUser na imagem alojada à conta de serviço do agente de serviço do Dataproc do seu projeto (consulte o artigo Partilhar imagens personalizadas numa organização).

  • Usar segredos da MOK (chave do proprietário da máquina) de arranque seguro: Para ativar o arranque seguro com a sua imagem personalizada do Dataproc, faça o seguinte:

    1. Ative a API Secret Manager (secretmanager.googleapis.com. O Dataproc gera e gere um par de chaves através do serviço Secret Manager.

    2. Adicione a flag --service-account="SERVICE_ACCOUNT" ao comando generate_custom_image.py quando gerar uma imagem personalizada. Nota: tem de conceder à conta de serviço a função Leitor do Secret Manager (roles/secretmanager.viewer) no projeto e a função Acessor do Secret Manager (roles/secretmanager.secretAccessor) nos segredos públicos e privados.

      Para mais informações com exemplos, consulte o ficheiro README.md e outros ficheiros no diretório examples/secure-boot do repositório GoogleCloudDataproc/custom-images no GitHub.

      Para desativar o arranque seguro: por predefinição, os scripts de imagem personalizada do Dataproc geram e gerem um par de chaves através do Secret Manager quando executados a partir de um cluster do Dataproc. Se não quiser usar o arranque seguro com a sua imagem personalizada, inclua o --trusted-cert=""(valor da flag vazio)generate_custom_image.py no comando quando gerar a imagem personalizada.

Antes de começar

Certifique-se de que configura o projeto antes de gerar a imagem personalizada.

Configure o seu projeto

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Instale o Python 3.11 ou superior
  15. 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
      
  16. Crie um contentor do Cloud Storage no seu projeto

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

      Go to Buckets

    2. Click Create.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      1. 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 label, and specify a key and a value for your label.
      2. In the Choose where to store your data section, do the following:
        1. Select a Location type.
        2. Choose a location where your bucket's data is permanently stored from the Location type drop-down menu.
        3. To set up cross-bucket replication, select Add cross-bucket replication via Storage Transfer Service and follow these steps:

          Set up cross-bucket replication

          1. In the Bucket menu, select a bucket.
          2. 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.
      3. In the Choose how to store your data section, do the following:
        1. Select a default storage class for the bucket or Autoclass for automatic storage class management of your bucket's data.
        2. To enable hierarchical namespace, in the Optimize storage for data-intensive workloads section, select Enable hierarchical namespace on this bucket.
      4. 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.
      5. 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 (), and select a Data encryption method.
    4. Click Create.

    Gere uma imagem personalizada

    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 do Compute Engine temporária com a imagem base do Dataproc especificada e, em seguida, executa o script de personalização na instância de VM para instalar pacotes personalizados e/ou atualizar configurações. Após a conclusão do script de personalização, este encerra a instância de VM e cria uma imagem personalizada do Dataproc a partir do disco da instância de VM. A VM temporária é eliminada após a criação da imagem personalizada. A imagem personalizada é guardada 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ários passos no Compute Engine.

    Executar o código

    Crie uma ramificação ou clone os ficheiros no GitHub em Dataproc custom images.

    Em seguida, execute o script generate_custom_image.py para que o Dataproc gere e guarde a 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]
    

    Flags obrigatórias

    • --image-name: o nome de saída da imagem personalizada.

    • --dataproc-version: a versão da imagem do Dataproc a usar na sua 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 vai executar para instalar os seus pacotes personalizados ou fazer outras personalizações. Este script é executado como um script de arranque do Linux apenas na VM temporária usada para criar a imagem personalizada. Pode especificar um script de inicialização diferente para outras ações de inicialização que quer realizar quando criar um cluster com a sua imagem personalizada.

      Imagens entre projetos: se a sua imagem personalizada for usada para criar clusters em projetos diferentes, pode ocorrer um erro devido à cache de comandos gcloud ou gsutil armazenada na imagem. Pode evitar este problema incluindo o seguinte comando no seu script de personalização para limpar as credenciais em cache.

      rm -r /root/.gsutil /root/.config/gcloud
      
    • --zone: a zona do Compute Engine onde generate_custom_image.py vai criar uma VM temporária para usar na criação da sua imagem personalizada.

    • --gcs-bucket: um URI no formato gs://BUCKET_NAME, que aponta para o seu contentor do Cloud Storage. O generate_custom_image.py escreve ficheiros de registo neste contentor.

    Flags opcionais

    • --family: a família de imagens da imagem personalizada. As famílias de imagens são usadas para agrupar imagens semelhantes e podem ser usadas quando cria um conjunto como um ponteiro para a imagem mais recente na família. Por exemplo, custom-2-2-debian12.
    • --no-smoke-test: este é um sinalizador opcional que desativa o teste rápido da imagem personalizada criada recentemente. O teste rápido cria um cluster de teste do Dataproc com a imagem criada recentemente, executa uma pequena tarefa e, em seguida, elimina o cluster no final do teste. O teste rápido é executado por predefinição para verificar se a imagem personalizada recém-criada pode criar um cluster do Dataproc funcional. A desativação deste passo através da flag --no-smoke-test acelera o processo de criação de imagens personalizadas, mas a respetiva utilização não é recomendada.
    • --subnet: A sub-rede a usar para criar a VM que cria a imagem personalizada do Dataproc. Se o seu projeto fizer parte de uma VPC partilhada, tem de especificar o URL completo da sub-rede no seguinte formato: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.
    • --optional-components: esta flag só está disponível quando usa versões da imagem base 2.3 e posteriores. Uma lista de componentes opcionais, como SOLR, RANGER, TRINO, DOCKER, FLINK, HIVE_WEBHCAT, ZEPPELIN, HUDI, ICEBERG e PIG (o PIG está disponível como um componente opcional nas versões de imagem 2.3 e posteriores), a instalar na imagem.

      Exemplo: comando de criação de clusters da CLI gcloud do Google Cloud:

      gcloud dataproc clusters create CLUSTER_NAME
          --image=CUSTOM_IMAGE_URI  \
          --optional-components=COMPONENT_NAME \
          ... other flags
      

    Para ver uma lista de flags opcionais disponíveis, consulte a secção Argumentos opcionais no GitHub.

    Se generate_custom_image.py for bem-sucedido, o imageURI da imagem personalizada é apresentado no resultado da janela do terminal (o imageUri completo é apresentado 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.
    #####################################################################
    
    

    Etiquetas de versão de imagens personalizadas (utilização avançada)

    Quando usa a ferramenta de imagem personalizada padrão do Dataproc, a ferramenta define uma etiqueta goog-dataproc-version na imagem personalizada criada. A etiqueta reflete as capacidades das funcionalidades e os protocolos usados pelo Dataproc para gerir o software na imagem.

    Utilização avançada: se usar o seu próprio processo para criar uma imagem personalizada do Dataproc, tem de adicionar manualmente a etiqueta goog-dataproc-version à imagem personalizada, da seguinte forma:

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

    2. Defina a etiqueta na imagem personalizada.

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

    Use uma imagem personalizada

    Especifica a imagem personalizada quando cria um cluster do Dataproc. Uma imagem personalizada é guardada em Imagens do Cloud Compute e é válida para criar um cluster do Dataproc durante 365 dias a partir da respetiva data de criação (consulte o artigo Crie um cluster com uma imagem personalizada expirada para usar uma imagem personalizada após a respetiva data de expiração de 365 dias).

    URI de imagem personalizada

    Transmite o imageUri da imagem personalizada à operação de criação do cluster. Este URI pode ser especificado de três formas:

    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 abreviado: CUSTOM_IMAGE_NAME

    As imagens personalizadas também podem ser especificadas pelo respetivo URI da família, que escolhe sempre a imagem mais recente na 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

    Encontre o URI da imagem personalizada

    CLI do Google Cloud

    Execute o seguinte comando para listar os nomes das suas imagens personalizadas.

    gcloud compute images list
    

    Transmita o nome da sua imagem personalizada ao seguinte comando para listar o URI (selfLink) da sua imagem personalizada.

    gcloud compute images describe custom-image-name
    

    Fragmento de saída:

    ...
    name: CUSTOM_IMAGE_NAME
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
    ...
    

    Consola

    1. Abra a página Compute Engine→Imagens na Google Cloud consola e, de seguida, clique no nome da imagem. Pode inserir uma consulta no campo filter images para limitar o número de imagens apresentadas.
    2. É apresentada a página Detalhes das imagens. Clique em REST equivalente.
    3. A resposta REST apresenta 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": ...,
        ...
      }
      

    Crie um cluster com uma imagem personalizada

    criar um cluster com a CLI gcloud, a API Dataproc ou aGoogle Cloud consola.

    CLI gcloud

    Crie um cluster do Dataproc com uma imagem personalizada através do comando dataproc clusters create com a flag --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 no objeto masterConfig, workerConfig e, se aplicável, secondaryWorkerConfig incluído num pedido da API cluster.create.

    Exemplo: pedido REST para criar um cluster do Dataproc padrão (um nó principal 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"
        }
      }
    }
      

    Consola

    1. Abra a página do Dataproc Criar um cluster. O painel Configurar cluster está selecionado.
    2. Na secção Controlo de versões, clique em Alterar. Selecione o separador Imagem personalizada, escolha a imagem personalizada a usar para o cluster do Dataproc e, de seguida, clique em Selecionar. As VMs do cluster são aprovisionadas com a imagem personalizada selecionada.

    Substitua as propriedades do cluster do Dataproc por uma imagem personalizada

    Pode usar imagens personalizadas para substituir as propriedades do cluster definidas durante a criação do cluster. Se criar um cluster com uma imagem personalizada e a operação de criação do cluster definir propriedades com valores diferentes dos definidos pela imagem personalizada, os valores das propriedades definidos pela imagem personalizada têm precedência.

    Para definir propriedades de agrupamento com a sua imagem personalizada:

    1. No seu script de personalização de imagem personalizada, crie um ficheiro dataproc.custom.properties em /etc/google-dataproc e, em seguida, defina os valores das propriedades do cluster no ficheiro.

      • Ficheiro de exemplo dataproc.custom.properties:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      
      • Exemplo de fragmento de criação de ficheiros de script de personalização para substituir duas propriedades de cluster:
      cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
      dataproc.conscrypt.provider.enable=true
      dataproc.logging.stackdriver.enable=false
      EOF
      

    Crie um cluster com uma imagem personalizada expirada

    Por predefinição, as imagens personalizadas expiram 365 dias a contar da data de criação da imagem. Pode criar um cluster que use uma imagem personalizada expirada concluindo os seguintes passos.

    1. Tentar criar um cluster do Dataproc com uma imagem personalizada expirada ou uma imagem personalizada que vai expirar no prazo de 10 dias.

      gcloud dataproc clusters create CLUSTER-NAME \
          --image=CUSTOM-IMAGE-NAME \
          --region=REGION \
          ... other flags
      
    2. A CLI gcloud emite 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 TOKEN_VALUE para a área de transferência.

    1. Use a CLI gcloud para criar novamente o cluster do Dataproc, 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
      

    A criação do cluster com a imagem personalizada deve ser bem-sucedida.