É possível criar um cluster do Serviço Gerenciado para Apache Spark com uma imagem personalizada que inclua seus pacotes pré-instalados. Esta página mostra como criar uma imagem personalizada e instalá-la em um cluster do Serviço Gerenciado para Apache Spark.
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 você precise usar a automação se 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 Serviço Gerenciado para Apache Spark.
Imagens de base compatíveis:as criações de imagens personalizadas exigem uma imagem de base do Serviço gerenciado para Apache Spark. As seguintes imagens de base são compatíveis: Debian, Rocky Linux e Ubuntu.
- Disponibilidade de imagens de base:novas imagens anunciadas nas Notas da versão do Serviço Gerenciado para Apache Spark não estão disponíveis para uso como base de imagens personalizadas até uma semana após a data do anúncio.
Usar componentes opcionais:
Imagens de base
2.2e anteriores: por padrão, todos os componentes opcionais do Serviço Gerenciado para Apache Spark (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.3e 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, você precisa 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 Serviço Gerenciado para Apache Spark no seu projeto precisa ter a permissão
compute.images.getna imagem no projeto host. Para isso, conceda o papelroles/compute.imageUserna imagem hospedada à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark 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 Serviço Gerenciado para Apache Spark, faça o seguinte:
Ative a API Secret Manager (
secretmanager.googleapis.com. O Serviço Gerenciado para Apache Spark gera e gerencia um par de chaves usando o serviço Secret Manager.Adicione a flag
--service-account="SERVICE_ACCOUNT"ao comandogenerate_custom_image.pyao 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.mde outros arquivos no diretório examples/secure-boot do repositórioGoogleCloudDataproc/custom-imagesno GitHub.Para desativar a inicialização segura:por padrão, os scripts de imagem personalizada do Serviço Gerenciado para Apache Spark geram e gerenciam um par de chaves usando o Secret Manager quando executados em um cluster do Serviço Gerenciado para Apache Spark. 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.pyao gerar a imagem personalizada.
Antes de começar
Configure o projeto antes de gerar a imagem personalizada.
Criar o projeto
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, 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.
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
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
crie um bucket do Cloud Storage no seu projeto
- No console do Google Cloud , acesse a página Buckets do Cloud Storage.
- Clique em Criar.
- Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima
etapa, clique em Continuar.
-
Na seção Começar, faça o seguinte:
- Insira um nome globalmente exclusivo que atenda aos requisitos de nomeação de bucket.
- Para adicionar um
rótulo de bucket,
abra a seção Rótulos (),
clique em add_box
Adicionar rótulo e especifique um
keye umvaluepara o rótulo.
-
Na seção Escolha onde armazenar seus dados, faça o seguinte:
- Selecione um tipo de local.
- Escolha um local onde os dados do bucket são armazenados permanentemente no menu suspenso Tipo de local.
- Se você selecionar o tipo de local birregional, também poderá ativar a replicação turbo usando a caixa de seleção relevante.
- Para configurar a replicação entre buckets, selecione
Adicionar replicação entre buckets usando o Serviço de transferência do Cloud Storage e
siga estas etapas:
Configurar a replicação entre buckets
- No menu Bucket, selecione um bucket.
Na seção Configurações de replicação, clique em Configurar para definir as configurações do job de replicação.
O painel Configurar a replicação entre buckets aparece.
- Para filtrar objetos a serem replicados por prefixo de nome de objeto, insira um prefixo com que você quer incluir ou excluir objetos e clique em Adicionar um prefixo.
- Para definir uma classe de armazenamento para os objetos replicados, selecione uma classe de armazenamento no menu Classe de armazenamento. Se você pular esta etapa, os objetos replicados vão usar a classe de armazenamento do bucket de destino por padrão.
- Clique em Concluído.
-
Na seção Escolha como armazenar seus dados, faça o seguinte:
- Selecione uma classe de armazenamento padrão para o bucket ou Classe automática para gerenciamento automático da classe de armazenamento dos dados do bucket.
- Para ativar o namespace hierárquico, na seção Otimizar o armazenamento para cargas de trabalho com uso intensivo de dados, selecione Ativar namespace hierárquico neste bucket.
- Na seção Escolha como controlar o acesso a objetos, selecione se o bucket aplica ou não a prevenção de acesso público e selecione um método de controle de acesso para os objetos do bucket.
-
Na seção Escolha como proteger os dados do objeto, faça o
seguinte:
- Selecione qualquer uma das opções em Proteção de dados que
você quer definir para o bucket.
- Para ativar a exclusão reversível, clique na caixa de seleção Política de exclusão reversível (para recuperação de dados) e especifique o número de dias que você quer reter os objetos após a exclusão.
- Para definir o controle de versões de objetos, clique na caixa de seleção Controle de versões de objetos (para controle de versões) e especifique o número máximo de versões por objeto e o número de dias após os quais as versões não atuais expiram.
- Para ativar a política de retenção em objetos e buckets, clique na caixa de seleção Retenção (para compliance) e faça o seguinte:
- Para ativar o bloqueio de retenção de objetos, clique na caixa de seleção Ativar retenção de objetos.
- Para ativar o Bloqueio de bucket, clique na caixa de seleção Definir política de retenção de bucket e escolha uma unidade de tempo e um período de armazenamento para o seu período de armazenamento.
- Para escolher como os dados do objeto serão criptografados, expanda a seção Criptografia de dados () e selecione um método de Criptografia de dados.
- Selecione qualquer uma das opções em Proteção de dados que
você quer definir para o bucket.
-
Na seção Começar, faça o seguinte:
- Clique em Criar.
Gerar uma imagem personalizada
Você usa generate_custom_image.py, um programa em Python, para criar uma imagem personalizada do Serviço Gerenciado para Apache Spark.
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 Serviço Gerenciado para Apache Spark especificada e executa o script de customizaçã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 Serviço gerenciado para Apache Spark 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 Serviço Gerenciado para Apache Spark.
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 Serviço Gerenciado para Apache Spark.
Em seguida, execute o script generate_custom_image.py para que o Serviço Gerenciado para Apache Spark
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.--dataproc-version: a versão da imagem do Serviço Gerenciado para Apache Spark a ser usada na imagem personalizada. Especifique a versão no formatox.y.z-osoux.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 você quer 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
gcloudougsutilarmazenado na imagem. Para evitar esse problema, inclua o comando a seguir no script de personalização para limpar as credenciais em cache.rm -r /root/.gsutil /root/.config/gcloud
--zone: a zona do Compute Engine em quegenerate_custom_image.pyvai 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.pygrava 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. O teste preliminar cria um cluster de teste do Serviço Gerenciado para Apache Spark 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 Serviço Gerenciado para Apache Spark. Desativar essa etapa usando a flag--no-smoke-testacelera o processo de build 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 serviço gerenciado para Apache Spark. 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.3ou 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.3e 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
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 Serviço Gerenciado para Apache Spark, ela
define um rótulo goog-dataproc-version na imagem
personalizada criada. O rótulo reflete os recursos e protocolos usados pelo
Serviço Gerenciado para Apache Spark para gerenciar o software na imagem.
Uso avançado: se você usa seu próprio processo para criar uma imagem personalizada do Serviço Gerenciado para Apache Spark, adicione o rótulo goog-dataproc-version manualmente à imagem personalizada, conforme mostrado a seguir:
Extraia o rótulo
goog-dataproc-versionda imagem de base do Serviço Gerenciado para Apache Spark 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,...]
Use uma imagem personalizada
Você especifica a imagem personalizada ao criar um cluster do Serviço Gerenciado para Apache Spark. A imagem personalizada é salva em Imagens do Cloud Compute e é válida por 365 dias para a criação de um cluster do Serviço gerenciado para Apache Spark. Para informações sobre como usar uma imagem após a data de validade, 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:
- 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
Encontrar o URI da imagem personalizada
CLI do Google Cloud
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) da imagem personalizada.
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
- Abra a página Compute Engine→Imagens no console do Google Cloud e clique no nome da imagem. Insira uma consulta no campo
filter imagespara limitar o número de imagens exibidas.
- A página Detalhes da imagem é 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": ..., ... }
Criar um cluster com uma imagem personalizada
Crie um cluster usando a CLI gcloud, a API do Serviço Gerenciado para Apache Spark ou o consoleGoogle Cloud .
CLI da gcloud
Crie um cluster do Serviço Gerenciado para Apache Spark 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:solicitação REST para criar um cluster padrão do Serviço Gerenciado para Apache Spark (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
- Abra a página do Serviço Gerenciado para Apache Spark Criar um cluster. O painel Configurar cluster está selecionado.
- Na seção Controle de versões, clique em Mudar. Selecione a guia Imagem personalizada, escolha a imagem personalizada a ser usada no cluster do Serviço gerenciado para Apache Spark e clique em Selecionar. As VMs do cluster serão provisionadas com a imagem personalizada selecionada.
Substituir propriedades do cluster do Serviço Gerenciado para Apache Spark 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:
No script de personalização de imagens personalizadas, crie um arquivo
dataproc.custom.propertiesem/etc/google-dataproce defina os valores da propriedade do cluster no arquivo.- Arquivo
dataproc.custom.propertiesde 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-managed-spark/dataproc.custom.properties dataproc.conscrypt.provider.enable=true dataproc.logging.stackdriver.enable=false EOF
- Arquivo
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.
Tente criar um cluster do Serviço Gerenciado para Apache Spark 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.tokendo 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.
Use a CLI gcloud para criar outro cluster do Serviço Gerenciado para Apache Spark, adicionando o TOKEN_VALUE 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.