As cargas de trabalho em lote e as sessões interativas do Serverless para Apache Spark são executadas com credenciais de usuário final ou de conta de serviço. Quando as credenciais de conta de serviço são usadas, a conta de serviço usada para executar cargas de trabalho em lote ou sessões interativas depende da versão do ambiente de execução do lote ou da sessão.
Contas de serviço do ambiente de execução pré-3.0
As versões do ambiente de execução do Spark anteriores a 3.0 com credenciais de conta de serviço usam a
conta de serviço padrão do Compute Engine ou uma
conta de serviço personalizada especificada pelo usuário para enviar uma carga de trabalho em lote ou criar uma sessão interativa.
Contas de serviço do ambiente de execução 3.0 e mais recentes
As versões do ambiente de execução do Spark 3.0 e mais recentes com credenciais de conta de serviço usam uma
conta de serviço personalizada especificada pelo usuário para enviar uma carga de trabalho em lote ou criar uma
sessão interativa.
O Serverless para Apache Spark 3.0 e ambientes de execução mais recentes criam a
conta de serviço **Agente de serviço do nó do Dataproc Resource Manager**, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, com o
papel **Agente de serviço do nó do Dataproc Resource Manager**
em um projeto de usuário do Dataproc Google Cloud . Essa conta de serviço realiza as seguintes operações do sistema em recursos do Serverless para Apache Spark localizados no projeto em que uma carga de trabalho é criada:
- Cloud Logging e Cloud Monitoring
- Operações básicas do nó do Dataproc Resource Manager, como
get,heartbeatemintOAuthToken
Conferir e gerenciar papéis de conta de serviço do IAM
Para conferir e gerenciar os papéis concedidos à carga de trabalho em lote ou à conta de serviço da sessão, faça o seguinte:
No Google Cloud console, acesse a página IAM.
Clique em Incluir atribuições de papel fornecidas pelo Google.
Confira os papéis listados para a carga de trabalho em lote ou a conta de serviço padrão ou personalizada da sessão padrão ou personalizada.
A imagem a seguir mostra o papel Worker do Dataproc necessário listado para a conta de serviço padrão do Compute Engine,
project_number-compute@developer.gserviceaccount.com, que o Serverless para Apache Spark usa por padrão como a conta de serviço da carga de trabalho ou da sessão.
O papel de worker do Dataproc atribuído à conta de serviço padrão do Compute Engine na seção IAM do Google Cloud console. Clique no ícone de lápis exibido na linha da conta de serviço para conceder ou remover papéis da conta de serviço.
Como usar uma conta de serviço entre projetos
É possível enviar uma carga de trabalho em lote que usa uma
conta de serviço de um projeto diferente do projeto de carga de trabalho em lote
(o projeto em que o lote é enviado). Nesta seção, o projeto em que
a conta de serviço está localizada é chamado de service account project, e o
projeto em que o lote é enviado é chamado de batch project.
Por que usar uma conta de serviço entre projetos para executar uma carga de trabalho em lote? Um possível motivo é se a conta de serviço no outro projeto tiver recebido papéis do IAM que fornecem acesso refinado aos recursos desse projeto.
Etapas da configuração
Os exemplos nesta seção se aplicam ao envio de uma carga de trabalho em lote
que é executada com uma versão do ambiente de execução anterior a 3.0.
No projeto da conta de serviço:
Enable the Dataproc API.
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.Conceda à sua conta de e-mail (o usuário que está criando o cluster) o papel de usuário da conta de serviço no projeto da conta de serviço ou, para um controle mais granular, a conta de serviço no projeto da conta de serviço.
Para mais informações, consulte Gerenciar o acesso a projetos, pastas e organizações para conceder papéis no nível do projeto e Gerenciar o acesso a contas de serviço para conceder papéis no nível da conta de serviço.
Exemplos da CLI da gcloud:
O comando de exemplo a seguir concede ao usuário o papel de usuário da conta de serviço no nível do projeto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Observações:
USER_EMAIL: forneça o endereço de e-mail da sua conta de usuário, no formato:user:user-name@example.com.
O comando de exemplo a seguir concede ao usuário o papel de usuário da conta de serviço no nível da conta de serviço:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Observações:
USER_EMAIL: forneça o endereço de e-mail da sua conta de usuário no formato:user:user-name@example.com.
Conceda à conta de serviço o papel de worker do Dataproc no projeto em lote.
Exemplo da CLI gcloud:
gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --role="roles/dataproc.worker"
No projeto em lote:
Conceda à conta de serviço do agente de serviço do Dataproc os papéis de usuário da conta de serviço e de criador de token da conta de serviço no projeto da conta de serviço ou, para um controle mais granular, a conta de serviço no projeto da conta de serviço. Ao fazer isso, você permite que a conta de serviço do agente de serviço do Dataproc no projeto em lote crie tokens para a conta de serviço no projeto da conta de serviço.
Para mais informações, consulte Gerenciar o acesso a projetos, pastas e organizações para conceder papéis no nível do projeto e Gerenciar o acesso a contas de serviço para conceder papéis no nível da conta de serviço.
Exemplos da CLI da gcloud:
Os comandos a seguir concedem à conta de serviço do agente de serviço do Dataproc no projeto em lote os papéis de usuário da conta de serviço e de criador de token da conta de serviço no nível do projeto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Os comandos de exemplo a seguir concedem à conta de serviço do agente de serviço do Dataproc conta de serviço no projeto em lote os papéis de usuário da conta de serviço e de criador de token da conta de serviço no nível da conta de serviço:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Conceda à conta de serviço do agente de serviço do Compute Engine no projeto em lote o papel de criador de token da conta de serviço no projeto da conta de serviço ou, para um controle mais granular, a conta de serviço no projeto da conta de serviço. Ao fazer isso, você concede à conta de serviço do agente de serviço do Compute Engine no projeto em lote a capacidade de criar tokens para a conta de serviço no projeto da conta de serviço.
Para mais informações, consulte Gerenciar o acesso a projetos, pastas e organizações para conceder papéis no nível do projeto e Gerenciar o acesso a contas de serviço para conceder papéis no nível da conta de serviço.
Exemplos da CLI da gcloud:
O comando de exemplo a seguir concede à conta de serviço do agente de serviço do Compute Engine no projeto em lote o papel de criador de token da conta de serviço no nível do projeto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
O comando de exemplo a seguir concede à conta de serviço do agente de serviço do Compute Engine no projeto de cluster o papel de criador de token da conta de serviço no nível da conta de serviço:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Enviar a carga de trabalho em lote
Depois de concluir as etapas de configuração, é possível enviar uma carga de trabalho em lote. Especifique a conta de serviço no projeto da conta de serviço como a conta de serviço a ser usada para a carga de trabalho em lote.
Resolver falhas baseadas em permissões
Permissões incorretas ou insuficientes para a conta de serviço usada pela sua carga de trabalho em lote ou sessão podem levar a falhas na criação de lotes ou sessões que informam uma mensagem de erro "O nó de computação do driver não foi inicializado para o lote em 600 segundos". Esse erro indica que o driver do Spark não pôde ser iniciado dentro do período de tempo limite alocado, geralmente devido à falta de acesso necessário aos Google Cloud recursos.
Para resolver esse problema, verifique se a conta de serviço tem os seguintes papéis ou permissões mínimas:
- Papel de worker do Dataproc (
roles/dataproc.worker): esse papel concede as permissões necessárias para que o Serverless para Apache Spark gerencie e execute cargas de trabalho e sessões do Spark. - Leitor de objetos do Storage (
roles/storage.objectViewer), Criador de objetos do Storage (roles/storage.objectCreator) ou Administrador de objetos do Storage (roles/storage.admin): se o aplicativo Spark lê ou grava em buckets do Cloud Storage, a conta de serviço precisa de permissões adequadas para acessar os buckets. Por exemplo, se os dados de entrada estiverem em um bucket do Cloud Storage,Storage Object Viewerserá necessário. Se o aplicativo gravar a saída em um bucket do Cloud Storage,Storage Object CreatorouStorage Object Adminserá necessário. - Editor de dados do BigQuery (
roles/bigquery.dataEditor) ou Leitor de dados do BigQuery (roles/bigquery.dataViewer): se o aplicativo Spark interagir com o BigQuery, verifique se a conta de serviço tem os papéis adequados do BigQuery. - Permissões do Cloud Logging: A conta de serviço precisa de permissões
para gravar registros no Cloud Logging para depuração eficaz. Normalmente, o
Logging Writerpapel (roles/logging.logWriter) é suficiente.
Falhas comuns relacionadas a permissões ou acesso
Papel
dataproc.workerausente: sem esse papel principal, a infraestrutura do Serverless para Apache Spark não pode provisionar e gerenciar corretamente o nó do driver.Permissões insuficientes do Cloud Storage: se o aplicativo Spark tentar ler dados de entrada ou gravar saída em um bucket do Cloud Storage sem as permissões necessárias da conta de serviço, o driver poderá falhar na inicialização porque não tem acesso a recursos críticos.
Problemas de rede ou firewall: o VPC Service Controls ou as regras de firewall podem bloquear inadvertidamente o acesso da conta de serviço a Google Cloud APIs ou recursos.
Para verificar e atualizar as permissões da conta de serviço:
- Acesse a página IAM e administrador > IAM no Google Cloud console.
- Localize a conta de serviço usada para cargas de trabalho ou sessões em lote.
- Verifique se os papéis necessários estão atribuídos. Se não estiverem, adicione-os.
Para uma lista de papéis e permissões do Serverless para Apache Spark, consulte Permissões e papéis do IAM do Serverless para Apache Spark.