Monitorar e resolver problemas de cargas de trabalho em lote do Dataproc sem servidor

Este documento descreve como monitorar e resolver problemas do Dataproc Serverless para cargas de trabalho em lote do Spark usando a interface do Spark.

Interface do Spark

A interface do Spark coleta detalhes de execução do Apache Spark do Dataproc Serverless para cargas de trabalho em lote do Spark. Não há cobrança pelo recurso da interface do Spark, que é ativado por padrão.

Os dados coletados pelo recurso Spark UI são armazenados por 90 dias. É possível usar essa interface da Web para monitorar e depurar cargas de trabalho do Spark sem precisar criar um servidor de histórico persistente.

Permissões e papéis obrigatórios do Identity and Access Management

As permissões a seguir são necessárias para usar o recurso da interface do Spark com cargas de trabalho em lote.

  • Permissão de coleta de dados: dataproc.batches.sparkApplicationWrite. Essa permissão precisa ser concedida à conta de serviço que executa cargas de trabalho em lote. Essa permissão está incluída no papel de Dataproc Worker, que é concedido automaticamente à conta de serviço padrão do Compute Engine que o Dataproc Serverless usa por padrão. Consulte Conta de serviço do Dataproc Serverless. No entanto, se você especificar uma conta de serviço personalizada para a carga de trabalho em lote, adicione a permissão dataproc.batches.sparkApplicationWrite a essa conta de serviço (normalmente, concedendo à conta de serviço o papel Worker do Dataproc).

  • Permissão de acesso à interface do Spark: dataproc.batches.sparkApplicationRead. Essa permissão precisa ser concedida a um usuário para acessar a interface do Spark no console do Google Cloud. Essa permissão está incluída nos papéis Dataproc Viewer, Dataproc Editor e Dataproc Administrator. Para abrir a interface do Spark no console do Google Cloud, você precisa ter uma dessas funções ou uma função personalizada que inclua essa permissão.

Abrir a interface do Spark

A página da interface do Spark está disponível no console do Google Cloud para cargas de trabalho em lote do Spark.

  1. Acesse a página Sessões interativas do Dataproc sem servidor.

    Acessar Lotes do Dataproc

  2. Clique em um ID do lote para abrir a página de detalhes do lote.

  3. Clique em Visualizar a interface do Spark no menu superior.

O botão Visualizar a interface do Spark fica desativado nos seguintes casos:

Limitações

A interface do Spark não oferece suporte aos seguintes workloads do Dataproc sem servidor:

Servidor de histórico persistente

O Dataproc Serverless para Spark cria os recursos de computação necessários para executar uma carga de trabalho, executa a carga de trabalho nesses recursos e, em seguida, exclui os recursos quando a carga de trabalho termina. As métricas e os eventos de carga de trabalho não persistem após a conclusão de uma carga de trabalho. No entanto, é possível usar um servidor de histórico persistente (PHS, na sigla em inglês) para manter o histórico de aplicativos de carga de trabalho (registros de eventos) no Cloud Storage.

Para usar um PHS com uma carga de trabalho em lote, faça o seguinte:

  1. Crie um servidor de histórico persistente do Dataproc (PHS, na sigla em inglês).

  2. Especifique seu PHS ao enviar uma carga de trabalho.

  3. Use o Component Gateway para se conectar ao PHS e conferir detalhes do aplicativo, estágios do programador, detalhes do nível da tarefa e informações do ambiente e do executor.

Registros do Dataproc Serverless para Spark

A geração de registros é ativada por padrão no Dataproc sem servidor para Spark, e os registros de carga de trabalho são mantidos após o término de uma carga de trabalho. O Dataproc Serverless para Spark coleta registros de carga de trabalho no Cloud Logging. É possível acessar os registros do Dataproc sem servidor para Spark no recurso Cloud Dataproc Batch no Explorador de registros.

Consultar os registros do Dataproc Serverless para Spark

O Explorador de registros no console do Google Cloud oferece um painel de consulta para ajudar a criar uma consulta para examinar os registros de carga de trabalho em lote. Confira as etapas para criar uma consulta e examinar os registros de carga de trabalho em lote:

  1. Acessar o Explorador de registros

  2. Seu projeto atual está selecionado. Clique em Refine scope Project para selecionar um projeto diferente.
  3. Defina uma consulta de registros em lote.

    • Use menus de filtro para filtrar uma carga de trabalho em lote.

      1. Em Todos os recursos, selecione o recurso Cloud Dataproc Batch.

        1. No painel Selecionar recurso, selecione a LOCALIZAÇÃO do lote e, em seguida, o ID DO LOTE. Esses parâmetros estão listados na página Batches do Dataproc no console do Google Cloud.

        2. Clique em Aplicar.

        3. Em Selecionar nomes de registros, digite dataproc.googleapis.com na caixa Pesquisar nomes de registros para limitar os tipos de registro a serem consultados. Selecione um ou mais nomes de arquivos de registro listados.

    • Use o editor de consultas para filtrar registros específicos da VM.

      1. Especifique o tipo e o nome do recurso de VM, conforme mostrado no exemplo a seguir:

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
        
        Observações:

        • BATCH_UUID:o UUID do lote é listado na página "Detalhes do lote" no console do Google Cloud, que é aberta quando você clica no ID do lote na página Lotes.

        Os registros de lote também listam o UUID do lote no nome do recurso da VM. Confira um exemplo de um lote de driver.log:

  4. Clique em Executar consulta.

Tipos de registro e consultas de exemplo do Dataproc Serverless para Spark

A lista a seguir descreve diferentes tipos de registro do Dataproc Serverless e fornece exemplos de consultas do Logs Explorer para cada tipo de registro.

  1. dataproc.googleapis.com/output: este arquivo de registro contém a saída da carga de trabalho em lote. O Dataproc Serverless para Spark transmite a saída em lote para o namespace output e define o nome do arquivo como JOB_ID.driver.log.

    Exemplo de consulta do Logs Explorer para registros de saída:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/spark: o namespace spark agrega os registros do Spark para daemons e executores em execução nas VMs mestre e de trabalho do cluster do Dataproc. Cada entrada de registro inclui um rótulo de componente master, worker ou executor para identificar a origem do registro, conforme mostrado abaixo:

    • executor: Logs de executores de código do usuário. Normalmente, esses são registros distribuídos.
    • master: registros do mestre do gerenciador de recursos independente do Spark, que são semelhantes aos registros do Dataproc no YARN do Compute Engine ResourceManager.
    • worker: registros do worker do gerenciador de recursos independente do Spark, que são semelhantes aos registros NodeManager do YARN do Dataproc no Compute Engine.

    Exemplo de consulta da Análise de registros para todos os registros no namespace spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    Exemplo de consulta do Logs Explorer para registros de componentes autônomos do Spark no namespace spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startup: o namespace startup inclui os registros de inicialização de lote (cluster). Todos os registros de script de inicialização são incluídos. Os componentes são identificados por rótulo, por exemplo:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Exemplo de consulta da Análise de registros para registros de inicialização em uma VM especificada:
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agent: o namespace agent agrega registros do agente do Dataproc. Cada entrada de registro inclui o rótulo do nome do arquivo que identifica a origem do registro.

    Exemplo de consulta da Análise de registros para registros de agentes gerados por uma VM de worker especificada:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscaler: o namespace autoscaler agrega os registros do escalonador automático do Dataproc Serverless para Spark.

    Exemplo de consulta da Análise de registros para registros de agentes gerados por uma VM de worker especificada:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

Para mais informações, consulte Registros do Dataproc.

Registros de auditoria do Dataproc sem servidor

Para informações sobre os registros de auditoria do Dataproc sem servidor, consulte Registros de auditoria do Dataproc.

Métricas de carga de trabalho

Por padrão, o Dataproc Serverless para Spark ativa a coleta de métricas do Spark disponíveis, a menos que você use as propriedades de coleta de métricas do Spark para desativar ou substituir a coleta de uma ou mais métricas do Spark.

É possível conferir as métricas de carga de trabalho no Metrics Explorer ou na página Batch details no console do Google Cloud.

Métricas de lote

As métricas de recursos batch do Dataproc fornecem insights sobre recursos de lote, como o número de executores de lote. As métricas de lote têm o prefixo dataproc.googleapis.com/batch.

Exemplo de métrica em lote no Metrics Explorer.

Métricas do Spark

As métricas do Spark disponíveis incluem métricas do driver e do executor do Spark e métricas do sistema. As métricas do Spark disponíveis têm o prefixo custom.googleapis.com/.

Exemplo de métrica de faísca no Metrics Explorer.

Configurar alertas de métricas

É possível criar alertas de métricas do Dataproc para receber avisos sobre problemas de carga de trabalho.

Criar gráficos

É possível criar gráficos que mostram as métricas de carga de trabalho usando o Metrics Explorer no console do Google Cloud. Por exemplo, é possível criar um gráfico para mostrar disk:bytes_used e filtrar por batch_id.

Cloud Monitoring

O monitoramento usa metadados e métricas de carga de trabalho para fornecer insights sobre a integridade e o desempenho do Dataproc Serverless para cargas de trabalho do Spark. As métricas de carga de trabalho incluem métricas do Spark, métricas de lote e métricas de operação.

É possível usar o Cloud Monitoring no console do Google Cloud para analisar métricas, adicionar gráficos, criar painéis e alertas.

Criar painéis

É possível criar um painel para monitorar cargas de trabalho usando métricas de vários projetos e diferentes produtos do Google Cloud. Para mais informações, consulte Criar e gerenciar painéis personalizados.

Solução de problemas avançada (pré-lançamento)

Esta seção aborda os recursos avançados de solução de problemas (pré-lançamento) que estão disponíveis no console do Google Cloud. Esses recursos incluem a solução de problemas assistida pelo Gemini para o Dataproc Serverless, que faz parte da oferta Gemini no BigQuery.

Acesso aos recursos em fase de pré-lançamento

Para se inscrever na versão de pré-lançamento dos recursos avançados de solução de problemas, preencha e envie o formulário de inscrição pré-GA do Gemini no BigQuery. Depois que o formulário for aprovado, os projetos listados nele terão acesso aos recursos de visualização.

Visualizar preços

Não há cobrança extra pela participação na versão prévia. As cobranças serão aplicadas aos seguintes recursos de pré-lançamento quando eles forem disponibilizados para todos os usuários (GA, na sigla em inglês):

O aviso prévio das cobranças do GA será enviado para o endereço de e-mail informado no formulário de inscrição da visualização.

Requisitos de atributos

  • Inscrição: é necessário se inscrever para usar o recurso.

  • Permissão:você precisa ter a permissão dataproc.batches.analyze.

    gcloud iam roles update CUSTOM_ROLE_ID --project=PROJECT_ID \
    --add-permissions="dataproc.batches.analyze"
    
  • Ativar a solução de problemas assistida pelo Gemini para o Dataproc Serverless:você ativa a solução de problemas assistida pelo Gemini para o Dataproc Serverless ao enviar cada carga de trabalho em lote recorrente do Spark usando o console do Google Cloud, a CLI gcloud ou a API Dataproc. Depois que esse recurso é ativado em uma carga de trabalho em lote recorrente, o Dataproc armazena uma cópia dos registros da carga de trabalho por 30 dias e usa os dados de registro salvos para fornecer solução de problemas assistida pelo Gemini para a carga de trabalho. Para informações sobre o conteúdo do registro de carga de trabalho do Spark, consulte Registros do Dataproc Serverless para Spark.

Console

Siga as etapas abaixo para ativar a solução de problemas assistida pelo Gemini em cada carga de trabalho recorrente do Spark:

  1. No console do Google Cloud, acesse a página Lotes do Dataproc.

    Acessar Lotes do Dataproc

  2. Para criar uma carga de trabalho em lote, clique em Criar.

  3. Na seção Container, preencha o nome da Cohorte, que identifica o lote como um de uma série de cargas de trabalho recorrentes. A análise assistida pelo Gemini é aplicada à segunda carga de trabalho e às subsequentes que são enviadas com esse nome de coorte. Por exemplo, especifique TPCH-Query1 como o nome da coorte para uma carga de trabalho programada que executa uma consulta TPC-H diária.

  4. Preencha outras seções da página Criar lote conforme necessário e clique em Enviar. Para mais informações, consulte Enviar uma carga de trabalho em lote.

gcloud

Execute o comando gcloud dataproc batches submit da CLI gcloud localmente em uma janela de terminal ou no Cloud Shell para ativar a solução de problemas assistida pelo Gemini em cada carga de trabalho recorrente do Spark:

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

Substitua:

  • COMMAND: o tipo de carga de trabalho do Spark, como Spark, PySpark, Spark-Sql ou Spark-R.
  • REGION: a região em que a carga de trabalho será executada.
  • COHORT: o nome do grupo, que identifica o lote como um de uma série de cargas de trabalho recorrentes. A análise assistida pelo Gemini é aplicada à segunda carga de trabalho e às subsequentes enviadas com esse nome de coorte. Por exemplo, especifique TPCH Query 1 como o nome da coorte para uma carga de trabalho programada que executa uma consulta TPC-H diária.

API

Inclua o nome RuntimeConfig.cohort em uma solicitação batches.create para ativar a solução de problemas assistida pelo Gemini em cada carga de trabalho de lote recorrente do Spark. A análise assistida pelo Gemini é aplicada ao segundo trabalho e aos trabalhos subsequentes enviados com esse nome de coorte. Por exemplo, especifique TPCH-Query1 como o nome da coorte para uma carga de trabalho programada que executa uma consulta TPC-H diária.

Exemplo:

...
runtimeConfig:
  cohort: TPCH-Query1
...

Solução de problemas com o Gemini para o Dataproc sem servidor

Os seguintes recursos de pré-lançamento da solução de problemas assistida pelo Gemini estão disponíveis nas páginas de lista Detalhes do lote e Lotes no console do Google Cloud.

  • Guia Investigar: a guia "Investigar" na página Detalhes do lote mostra uma seção "Visão geral de integridade" (pré-lançamento) com os seguintes painéis de solução de problemas assistida pelo Gemini:

    • O que foi ajustado automaticamente? Se você ativou a autoajuste em uma ou mais cargas de trabalho, esse painel mostra as mudanças mais recentes que foram aplicadas a cargas de trabalho em execução, concluídas e com falha.

    Painel de investigação de ajuste automático.

    • O que está acontecendo agora? e O que posso fazer? Clique em Perguntar ao Gemini para solicitar recomendações que ajudam a corrigir cargas de trabalho com falha ou melhorar cargas de trabalho bem-sucedidas, mas lentas.

    Botão "Perguntar ao Gemini".

    Se você clicar em Ask Gemini, o Gemini para Google Cloud vai gerar um resumo de erros, anomalias ou destaques dos logs de workload, métricas do Spark e eventos do Spark. O Gemini para o Google Cloud também pode mostrar uma lista de etapas recomendadas para corrigir uma carga de trabalho com falha ou melhorar o desempenho de uma carga de trabalho bem-sucedida, mas lenta.

    Insights gerados pelo Gemini para Google Cloud.

  • Colunas de solução de problemas assistida pelo Gemini:como parte da versão de pré-lançamento, a página de lista Batches do Dataproc no console do Google Cloud inclui as colunas What was Autotuned, What is happening now? e What can I do about it?.

    Os lotes listam as colunas do Gemini.

    O botão Ask Gemini é mostrado e ativado somente se um lote concluído estiver no estado Failed, Cancelled ou Succeeded. Se você clicar em Ask Gemini, o Gemini para Google Cloud vai gerar um resumo de erros, anomalias ou destaques dos registros de carga de trabalho, métricas do Spark e eventos do Spark. O Gemini para o Google Cloud também pode mostrar uma lista de etapas recomendadas para corrigir uma carga de trabalho com falha ou melhorar o desempenho de uma carga de trabalho bem-sucedida, mas lenta.

Destaques da métrica de lote

Como parte da versão de pré-lançamento, a página Detalhes do lote no console do Google Cloud inclui gráficos que mostram valores importantes da métrica de carga de trabalho em lote. Os gráficos de métrica são preenchidos com valores após a conclusão do lote.

Painel de métricas de lote.

Tabela de métricas

A tabela a seguir lista as métricas de carga de trabalho do Spark exibidas na página Detalhes do lote no console do Google Cloud e descreve como os valores de métrica podem fornecer insights sobre o status e o desempenho da carga de trabalho.

Métrica O que ele mostra?
Métricas no nível do executor
Razão do tempo de GC da JVM para o tempo de execução Essa métrica mostra a proporção do tempo de GC (coleta de lixo) da JVM para o tempo de execução por executor. Razões altas podem indicar vazamentos de memória em tarefas executadas em executores específicos ou estruturas de dados ineficientes, o que pode levar a uma alta taxa de rotatividade de objetos.
Bytes do disco espalhados Essa métrica mostra o número total de bytes de disco espalhados entre diferentes executores. Se um executor mostrar bytes de disco despejados altos, isso pode indicar distorção de dados. Se a métrica aumentar com o tempo, isso pode indicar que há estágios com pressão ou vazamentos de memória.
Bytes lidos e gravados Essa métrica mostra os bytes gravados em comparação com os bytes lidos por executor. Grandes discrepâncias nos bytes lidos ou gravados podem indicar cenários em que as mesclagens replicadas levam à amplificação de dados em executores específicos.
Registros lidos e gravados Essa métrica mostra os registros lidos e gravados por executor. Números grandes de registros lidos com números baixos de registros gravados podem indicar um gargalo na lógica de processamento em executores específicos, fazendo com que os registros sejam lidos enquanto aguardam. Executores que ficam constantemente atrasados em leituras e gravações podem indicar contenção de recursos nesses nós ou ineficiências de código específicas do executor.
Razão entre o tempo de gravação aleatória e o tempo de execução A métrica mostra o tempo que o executor gastou no tempo de execução do shuffle em comparação com o tempo de execução geral. Se esse valor for alto para alguns executores, isso pode indicar distorção de dados ou serialização ineficiente de dados. É possível identificar estágios com tempos de gravação de shuffle longos na interface do Spark. Procure tarefas fora da curva nessas etapas que levam mais tempo do que a média para serem concluídas. Verifique se os executores com tempos de gravação de shuffle altos também mostram uma alta atividade de E/S de disco. Uma serialização mais eficiente e outras etapas de particionamento podem ajudar. Gravações de registros muito grandes em comparação com leituras de registros podem indicar duplicação de dados não intencional devido a mesclagens ineficientes ou transformações incorretas.
Métricas no nível do aplicativo
Progressão de fases Essa métrica mostra o número de estágios com falha, em espera e em execução. Um grande número de estágios com falha ou em espera pode indicar distorção de dados. Verifique se há partições de dados e depure o motivo da falha do estágio usando a guia Stages na interface do Spark.
Executores do Spark em lote Essa métrica mostra o número de executores que podem ser necessários em comparação com o número de executores em execução. Uma grande diferença entre os executores necessários e em execução pode indicar problemas de escalonamento automático.
Métricas no nível da VM
Memória usada Essa métrica mostra a porcentagem da memória da VM em uso. Se a porcentagem principal for alta, isso pode indicar que o driver está sob pressão de memória. Para outros nós de VM, uma porcentagem alta pode indicar que os executores estão ficando sem memória, o que pode levar a um grande vazamento de disco e a um tempo de execução de carga de trabalho mais lento. Use a interface do Spark para analisar executores e verificar o tempo de GC alto e as falhas de tarefas altas. Também depure o código do Spark para armazenar em cache grandes conjuntos de dados e transmitir variáveis desnecessárias.

Registros do job

Como parte da versão de pré-lançamento, a página Detalhes do lote no console do Google Cloud lista os registros de jobs (carga de trabalho em lote). Os registros incluem avisos e erros filtrados da saída de carga de trabalho e dos registros do Spark. Você pode selecionar a Gravidade do registro, adicionar um Filtro e clicar no ícone Ver no Explorador de registros para abrir os registros de lote selecionados no Explorador de registros.

Exemplo: a Análise de registros é aberta depois de escolher Errors no seletor de gravidade na página Detalhes do lote no console do Google Cloud.

Análise de registros em lote.