Este documento fornece orientações sobre como solucionar problemas comuns que impedem a inicialização de cargas de trabalho em lote e sessões interativas do Google Cloud Serverless para Apache Spark.
Visão geral
Normalmente, quando um lote ou sessão não é iniciado, ele informa a seguinte mensagem de erro:
Driver compute node failed to initialize for batch in 600 seconds
Essa mensagem de erro indica que o driver do Spark não pôde ser iniciado dentro do período de tempo limite padrão de 600 segundos (10 minutos). As causas comuns estão relacionadas a permissões de conta de serviço, disponibilidade de recursos, configuração de rede ou propriedades do Spark.
Causas de falha de início de lote e sessão e etapas de solução de problemas
As seções a seguir listam as causas comuns de falhas de início de lote e sessão com dicas de solução de problemas para ajudar você a resolver os problemas.
Permissões insuficientes da conta de serviço
A conta de serviço usada pelo lote ou sessão do Serverless para Apache Spark requer papéis específicos do IAM que incluem permissões para operação do Serverless para Apache Spark e acesso a Google Cloud recursos. Se a conta de serviço não tiver os papéis necessários, o driver do Spark para o lote ou sessão poderá falhar na inicialização.
- Papel de worker necessário: a conta de serviço de lote ou sessão precisa ter o
papel de worker do Dataproc (
roles/dataproc.worker). Esse papel contém as permissões mínimas necessárias para que o Serverless para Apache Spark provisione e gerencie recursos de computação. - Permissões de acesso a dados: se o aplicativo Spark lê ou
grava no Cloud Storage ou no BigQuery, a conta de serviço precisa de papéis relacionados a esses serviços:
- Cloud Storage: o papel `Storage Object Viewer` (
roles/storage.objectViewer) é necessário para leitura, e o papel `Storage Object Creator` (roles/storage.objectCreator) ou papel `Storage Object Admin` (roles/storage.admin) é necessário para gravação.Storage Object ViewerStorage Object CreatorStorage Object Admin - BigQuery: o
BigQuery Data Viewerpapel (roles/bigquery.dataViewer) é necessário para leitura e oBigQuery Data Editorpapel (roles/bigquery.dataEditor) é necessário para gravação.
- Cloud Storage: o papel `Storage Object Viewer` (
- Permissões de geração de registros: a conta de serviço precisa de um papel com
permissão para gravar registros no Cloud Logging. Normalmente, o
Logging Writerpapel (roles/logging.logWriter) é suficiente.
Dicas para solução de problemas:
- Identifique a conta de serviço de lote ou sessão . Se não for especificado, o padrão será a conta de serviço padrão do Compute Engine.
- Acesse a página **IAM e administrador > IAM** no Google Cloud console, encontre a conta de serviço de lote ou sessão e verifique se ela tem os papéis necessários para as operações. Conceda os papéis ausentes.
Cota insuficiente
Exceder as cotas específicas do projeto ou da região para o Google Cloud Serverless para Apache Spark ou outros Google Cloud recursos pode impedir que novos lotes ou sessões sejam iniciados.
Dicas para solução de problemas:
Revise a página de cotas do Google Cloud Serverless para Apache Spark para entender os limites de lotes simultâneos, DCUs e armazenamento de shuffle.
- Também é possível usar o comando
gcloud compute quotas listpara conferir o uso e os limites atuais do projeto e da região:gcloud compute quotas list --project=PROJECT_ID --filter="service:dataproc.googleapis.com"
- Também é possível usar o comando
Se você atingir os limites de cota repetidamente, considere solicitar um aumento de cota no Google Cloud console.
Problemas de configuração de rede
Configurações de rede incorretas, como configuração de VPC, Acesso privado do Google, ou regras de firewall, podem impedir que o driver do Spark seja inicializado ou se conecte aos serviços necessários.
Dicas para solução de problemas:
Verifique se a rede VPC e a sub-rede especificadas para o lote ou sessão estão configuradas corretamente e têm endereços IP suficientes disponíveis.
Se o lote ou sessão precisar acessar as APIs e os serviços do Google sem passar pela Internet pública, verifique se o Acesso privado do Google está ativado para a sub-rede.
Revise as regras de firewall da VPC para verificar se elas não bloqueiam inadvertidamente a comunicação interna ou a saída para APIs do Google ou serviços externos exigidos pelo aplicativo Spark.
Problemas de código do aplicativo ou propriedades inválidas do Spark
Propriedades do Spark mal configuradas, principalmente aquelas relacionadas a recursos do driver, ou problemas no código do aplicativo Spark podem levar a falhas de inicialização.
Dicas para solução de problemas:
Verifique os valores de
spark.driver.memoryespark.driver.cores. Verifique se eles estão dentro de limites razoáveis e alinhados com as DCUs disponíveis. Valores excessivamente grandes para essas propriedades podem levar ao esgotamento de recursos e falhas de inicialização. Remova as propriedades desnecessárias ou experimentais do Spark para simplificar a depuração.Tente executar um aplicativo Spark "Hello World" para determinar se o problema está na configuração do ambiente ou devido à complexidade ou erros do código.
Verifique se todos os JARs de aplicativos, arquivos Python, ou dependências especificados para o lote ou sessão estão localizados corretamente no Cloud Storage e podem ser acessados pela conta de serviço de lote ou sessão.
Verifique os registros
Uma etapa fundamental no diagnóstico de falhas de criação de lotes é examinar os registros detalhados no Cloud Logging.
- Acesse a página Cloud Logging noconsole. Google Cloud
- Filtre por lotes ou sessões do Serverless para Apache Spark:
- No menu suspenso Recurso, selecione
Cloud Dataproc BatchouCloud Dataproc Session. - Filtre por
batch_idousession_idpara o lote ou sessão com falha. Também é possível filtrar porproject_idelocation(região).
- No menu suspenso Recurso, selecione
- Procure entradas de registro com
jsonPayload.component="driver". Esses registros geralmente contêm mensagens de erro específicas ou rastreamentos de pilha que podem identificar o motivo da falha de inicialização do driver antes que o tempo limite de 600 segundos ocorra.