Servidor de histórico persistente do Dataproc

Vista geral

O servidor de histórico persistente (PHS) do Dataproc fornece interfaces Web para ver o histórico de tarefas para tarefas executadas em clusters do Dataproc ativos ou eliminados. Está disponível na versão 1.5 da imagem do Dataproc e posteriores, e é executado num cluster do Dataproc de nó único. Fornece interfaces Web para os seguintes ficheiros e dados:

  • Ficheiros do histórico de tarefas do MapReduce e do Spark

  • Ficheiros do histórico de tarefas do Flink (consulte o componente Flink opcional do Dataproc para criar um cluster do Dataproc para executar tarefas do Flink)

  • Ficheiros de dados da Linha cronológica da aplicação criados pelo YARN Timeline Service v2 e armazenados numa instância do Bigtable.

  • Registos de agregação do YARN

O servidor de histórico persistente acede e apresenta ficheiros do histórico de tarefas do Spark e do MapReduce, ficheiros do histórico de tarefas do Flink e ficheiros de registo do YARN escritos no Cloud Storage durante o ciclo de vida dos clusters de tarefas do Dataproc.

Limitações

  • A versão da imagem do cluster PHS e a versão da imagem dos clusters de tarefas do Dataproc têm de corresponder. Por exemplo, pode usar um cluster PHS da versão de imagem 2.0 do Dataproc para ver ficheiros do histórico de tarefas de tarefas executadas na versão de imagem 2.0 do Dataproc que estavam localizadas no projeto onde o cluster PHS está localizado.

  • Um cluster PHS não suporta o Kerberos e a autenticação pessoal.

Crie um cluster PHS do Dataproc

Pode executar o seguinte comando gcloud dataproc clusters create num terminal local ou no Cloud Shell com as seguintes flags e propriedades do cluster para criar um cluster de nó único do servidor de histórico persistente do Dataproc.

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT \
    --region=REGION \
    --single-node \
    --enable-component-gateway \
    --optional-components=COMPONENT \
    --properties=PROPERTIES
  • CLUSTER_NAME: especifique o nome do cluster do PHS.
  • PROJECT: especifique o projeto a associar ao cluster do PHS. Este projeto deve ser o mesmo que o projeto associado ao cluster que executa os seus trabalhos (consulte o artigo Crie um cluster de trabalhos do Dataproc).
  • REGION: especifique uma região do Compute Engine onde o cluster PHS vai estar localizado.
  • --single-node: um cluster PHS é um cluster de nó único do Dataproc.
  • --enable-component-gateway: Esta flag ativa as interfaces Web do Component Gateway no cluster PHS.
  • COMPONENT: use esta flag para instalar um ou mais componentes opcionais no cluster. Tem de especificar o componente FLINK opcional para executar o serviço Web HistoryServer do Flink no cluster PHS para ver os ficheiros do histórico de tarefas do Flink.
  • PROPERTIES. Especifique uma ou mais propriedades de cluster.
  • Opcionalmente, adicione a flag --image-version para especificar a versão da imagem do cluster do PHS. A versão da imagem do PHS tem de corresponder à versão da imagem dos clusters de tarefas do Dataproc. Consulte as Limitações.

    Notas:

    • Os exemplos de valores de propriedades nesta secção usam um caráter universal "*" para permitir que o PHS corresponda a vários diretórios no contentor especificado escritos por diferentes clusters de tarefas (mas consulte as considerações sobre a eficiência dos carateres universais).
    • Nos exemplos seguintes, são apresentadas flags --properties separadas para facilitar a leitura. A prática recomendada quando usa gcloud dataproc clusters create para criar um cluster do Dataproc no Compute Engine é usar uma flag --properties para especificar uma lista de propriedades separadas por vírgulas (consulte a formatação das propriedades do cluster).

    Propriedades:

    • yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/*/yarn-logs: Adicione esta propriedade para especificar a localização do Cloud Storage onde o PHS acede aos registos do YARN escritos por clusters de tarefas.
    • spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history: Adicione esta propriedade para ativar o histórico de tarefas do Spark persistente. Esta propriedade especifica a localização onde o PHS acede aos registos do histórico de tarefas do Spark escritos por clusters de tarefas.

      Nos clusters do Dataproc 2.0 ou superior, também tem de definir as duas propriedades seguintes para ativar os registos do histórico do Spark do PHS (consulte as opções de configuração do servidor de histórico do Spark). O valor spark.history.custom.executor.log.url é um valor literal que contém {{PLACEHOLDERS}} para variáveis que vão ser definidas pelo servidor de histórico persistente. Estas variáveis não são definidas pelos utilizadores; transmita o valor da propriedade conforme apresentado.

      --properties=spark:spark.history.custom.executor.log.url.applyIncompleteApplication=false
      
      --properties=spark:spark.history.custom.executor.log.url={{YARN_LOG_SERVER_URL}}/{{NM_HOST}}:{{NM_PORT}}/{{CONTAINER_ID}}/{{CONTAINER_ID}}/{{USER}}/{{FILE_NAME}}
      

    • mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done: Adicione esta propriedade para ativar o histórico de tarefas do MapReduce persistente. Esta propriedade especifica a localização do Cloud Storage onde o PHS acede aos registos do histórico de tarefas do MapReduce escritos por clusters de tarefas.

    • dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id: Depois de configurar o serviço de cronologia do Yarn v2, adicione esta propriedade para usar o cluster PHS para ver os dados da cronologia nas interfaces Web do serviço de cronologia de aplicações do YARN V2 e do Tez (consulte as interfaces Web do gateway de componentes).

    • flink:historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs: Use esta propriedade para configurar o Flink HistoryServer de modo a monitorizar uma lista de diretórios separados por vírgulas.

    Exemplos de propriedades:

    --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history
    
    --properties=mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done
    
    --properties=flink:flink.historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs
    

Crie um cluster de tarefas do Dataproc

Pode executar o seguinte comando num terminal local ou no Cloud Shell para criar um cluster de tarefas do Dataproc que executa tarefas e escreve ficheiros do histórico de tarefas num servidor de histórico persistente (PHS).

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT \
    --region=REGION \
    --optional-components=COMPONENT \
    --enable-component-gateway \
    --properties=PROPERTIES \
    other args ...
  • CLUSTER_NAME: especifique o nome do cluster de tarefas.
  • PROJECT: especifique o projeto associado ao cluster de tarefas.
  • REGION: especifique a região do Compute Engine onde o cluster de tarefas vai estar localizado.
  • --enable-component-gateway: este indicador ativa as interfaces Web do Component Gateway no cluster de tarefas.
  • COMPONENT: use esta flag para instalar um ou mais componentes opcionais no cluster. Especifique o FLINKcomponente opcional para executar tarefas do Flink no cluster.
  • PROPERTIES: adicione uma ou mais das seguintes propriedades do cluster para definir localizações do Cloud Storage não predefinidas relacionadas com o PHS e outras propriedades do cluster de tarefas.

    Notas:

    • Os exemplos de valores de propriedades nesta secção usam um caráter universal "*" para permitir que o PHS corresponda a vários diretórios no contentor especificado escritos por diferentes clusters de tarefas (mas consulte as considerações sobre a eficiência dos carateres universais).
    • Nos exemplos seguintes, são apresentadas flags --properties separadas para facilitar a leitura. A prática recomendada quando usa gcloud dataproc clusters create para criar um cluster do Dataproc no Compute Engine é usar uma flag --properties para especificar uma lista de propriedades separadas por vírgulas (consulte a formatação das propriedades do cluster).

    Propriedades:

    • yarn:yarn.nodemanager.remote-app-log-dir: Por predefinição, os registos YARN agregados são ativados em clusters de tarefas do Dataproc e escritos no contentor temporário do cluster. Adicione esta propriedade para especificar uma localização do Cloud Storage diferente onde o cluster vai escrever registos de agregação para acesso pelo servidor de histórico persistente.
      --properties=yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/directory-name/yarn-logs
      
    • spark:spark.history.fs.logDirectory e spark:spark.eventLog.dir: Por predefinição, os ficheiros do histórico de tarefas do Spark são guardados no cluster temp bucket no diretório /spark-job-history. Pode adicionar estas propriedades para especificar diferentes localizações do Cloud Storage para estes ficheiros. Se forem usadas ambas as propriedades, têm de apontar para diretórios no mesmo contentor.
      --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history
      
      --properties=spark:spark.eventLog.dir=gs://bucket-name/directory-name/spark-job-history
      
    • mapred:mapreduce.jobhistory.done-dir e mapred:mapreduce.jobhistory.intermediate-done-dir: Por predefinição, os ficheiros do histórico de tarefas do MapReduce são guardados no cluster temp bucket nos diretórios /mapreduce-job-history/done e /mapreduce-job-history/intermediate-done. A localização mapreduce.jobhistory.intermediate-done-dir intermédia é um armazenamento temporário. Os ficheiros intermédios são movidos para a localização mapreduce.jobhistory.done-dir quando a tarefa MapReduce é concluída. Pode adicionar estas propriedades para especificar localizações diferentes do Cloud Storage para estes ficheiros. Se forem usadas ambas as propriedades, têm de apontar para diretórios no mesmo contentor.
      --properties=mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done
      
      --properties=mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done
      
    • spark:spark.history.fs.gs.outputstream.type: esta propriedade aplica-se a clusters de versões de imagens 2.0 e 2.1 que usam a versão 2.0.x do conetor do Cloud Storage (a versão do conetor predefinida para clusters de versões de imagens 2.0 e 2.1). Controla a forma como as tarefas do Spark enviam dados para o Cloud Storage. A predefinição é BASIC, que envia dados para o Cloud Storage após a conclusão da tarefa. Quando definido como FLUSHABLE_COMPOSITE, os dados são copiados para o Cloud Storage a intervalos regulares enquanto a tarefa está em execução, conforme definido por spark:spark.history.fs.gs.outputstream.sync.min.interval.ms.
      --properties=spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
      
    • spark:spark.history.fs.gs.outputstream.sync.min.interval.ms: Esta propriedade aplica-se a clusters de versões de imagens 2.0 e 2.1 que usam a versão 2.0.x do conetor do Cloud Storage (a versão do conetor predefinida para clusters de versões de imagens 2.0 e 2.1). Controla a frequência em milissegundos com que os dados são transferidos para o Cloud Storage quando spark:spark.history.fs.gs.outputstream.type está definido como FLUSHABLE_COMPOSITE. O intervalo de tempo predefinido é 5000ms. Pode especificar o valor do intervalo de tempo em milissegundos com ou sem o sufixo ms.
      --properties=spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=INTERVALms
      
    • spark:spark.history.fs.gs.outputstream.sync.min.interval: Esta propriedade aplica-se a clusters da versão de imagem 2.2 e posteriores que usam a versão 3.0.x do conetor do Cloud Storage (a versão do conetor predefinida para clusters da versão de imagem 2.2). Substitui a propriedade spark:spark.history.fs.gs.outputstream.sync.min.interval.ms anterior e suporta valores com sufixo de tempo, como ms, s e m. Controla a frequência com que os dados são transferidos para o Cloud Storage quando spark:spark.history.fs.gs.outputstream.type está definido como FLUSHABLE_COMPOSITE.
      --properties=spark:spark.history.fs.gs.outputstream.sync.min.interval=INTERVAL
      
    • dataproc:yarn.atsv2.bigtable.instance: Depois de configurar o serviço de cronologia do Yarn v2, adicione esta propriedade para escrever dados da cronologia do YARN na instância do Bigtable especificada para visualização no cluster do PHS YARN Application Timeline Service V2 e nas interfaces Web do Tez. Nota: a criação do cluster falha se a instância do Bigtable não existir.
      --properties=dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
      
    • flink:jobhistory.archive.fs.dir: O Flink JobManager arquiva os trabalhos do Flink concluídos carregando informações de trabalhos arquivadas para um diretório do sistema de ficheiros. Use esta propriedade para definir o diretório de arquivo em flink-conf.yaml.
      --properties=flink:jobmanager.archive.fs.dir=gs://bucket-name/job-cluster-1/flink-job-history/completed-jobs
      

Use o PHS com cargas de trabalho em lote do Spark

Para usar o servidor de histórico persistente com o Dataproc sem servidor para cargas de trabalho em lote do Spark:

  1. Crie um cluster PHS.

  2. Selecione ou especifique o cluster PHS quando enviar uma carga de trabalho em lote do Spark.

Use o PHS com o Dataproc no Google Kubernetes Engine

Para usar o servidor de histórico persistente com o Dataproc no GKE:

  1. Crie um cluster PHS.

  2. Selecione ou especifique o cluster do PHS quando criar um cluster virtual do Dataproc no GKE.

Interfaces Web do gateway de componentes

Na Google Cloud consola, na página Dataproc Clusters, clique no nome do cluster do PHS para abrir a página Detalhes do cluster. No separador Interfaces Web, selecione os links do gateway de componentes para abrir as interfaces Web em execução no cluster do PHS.

Google Cloud

Interface Web do Spark History Server

A captura de ecrã seguinte mostra a interface Web do Spark History Server a apresentar links para tarefas do Spark executadas em job-cluster-1 e job-cluster-2 após a configuração das localizações spark.history.fs.logDirectory e spark:spark.eventLog.dir dos clusters de tarefas e spark.history.fs.logDirectory do cluster do PHS da seguinte forma:

job-cluster-1 gs://example-cloud-storage-bucket/job-cluster-1/spark-job-history
job-cluster-2 gs://example-cloud-storage-bucket/job-cluster-2/spark-job-history
phs-cluster gs://example-cloud-storage-bucket/*/spark-job-history

Pode listar tarefas por nome da app na interface Web do Spark History Server introduzindo um nome da app na caixa de pesquisa. O nome da app pode ser definido de uma das seguintes formas (indicadas por prioridade):

  1. Definido no código da aplicação ao criar o contexto do Spark
  2. Definida pela propriedade spark.app.name quando a tarefa é enviada
  3. Definido pelo Dataproc para o nome completo do recurso REST para a tarefa (projects/project-id/regions/region/jobs/job-id)

Os utilizadores podem introduzir um termo de nome de app ou recurso na caixa Pesquisar para encontrar e listar trabalhos.

Registos de eventos

A interface Web do Spark History Server disponibiliza um botão Registo de eventos no qual pode clicar para transferir registos de eventos do Spark. Estes registos são úteis para examinar o ciclo de vida da aplicação Spark.

Empregos de Spark

As aplicações Spark são divididas em vários trabalhos, que são ainda divididos em várias fases. Cada fase pode ter várias tarefas, que são executadas em nós de execução (trabalhadores).

  • Clique num ID da app Spark na interface Web para abrir a página Spark Jobs, que apresenta uma cronologia de eventos e um resumo dos trabalhos na aplicação.

  • Clique num trabalho para abrir uma página de detalhes do trabalho com um gráfico acíclico dirigido (DAG) e um resumo das fases do trabalho.

  • Clique numa fase ou use o separador Fases para selecionar uma fase e abrir a página Detalhes da fase.

    Os detalhes da fase incluem uma visualização DAG, uma cronologia de eventos e métricas para as tarefas na fase. Pode usar esta página para resolver problemas relacionados com tarefas restritas, atrasos do programador e erros de falta de memória. O visualizador de DAG mostra a linha de código a partir da qual a fase é derivada, o que ajuda a rastrear problemas até ao código.

  • Clique no separador Executors para ver informações sobre os nós de controlador e executor da aplicação Spark.

    As informações importantes nesta página incluem o número de núcleos e o número de tarefas que foram executadas em cada executor.

Interface Web do Tez

O Tez é o motor de execução predefinido para o Hive e o Pig no Dataproc. O envio de uma tarefa do Hive num cluster de tarefas do Dataproc inicia uma aplicação Tez.

Se configurou o serviço de cronologia do Yarn v2 e definiu a propriedade dataproc:yarn.atsv2.bigtable.instance quando criou os clusters de tarefas do PHS e do Dataproc, o YARN escreve dados da cronologia de tarefas do Hive e do Pig gerados na instância do Bigtable especificada para obtenção e apresentação na interface Web do Tez em execução no servidor do PHS.

Interface Web da cronologia de aplicações do YARN V2

Se configurou o serviço da Linha cronológica do Yarn v2 e definiu a propriedade dataproc:yarn.atsv2.bigtable.instance quando criou os clusters de tarefas do PHS e do Dataproc, o YARN escreve dados da linha cronológica de tarefas gerados na instância do Bigtable especificada para obtenção e apresentação na interface Web do serviço da Linha cronológica de aplicações do YARN em execução no servidor do PHS. As tarefas do Dataproc são apresentadas no separador Atividade de fluxo na interface Web.

Configure o serviço de cronologia do Yarn v2

Para configurar o serviço Yarn Timeline v2, configure uma instância do Bigtable e, se necessário, verifique as funções da conta de serviço da seguinte forma:

  1. Crie uma instância do Bigtable.

  2. Verifique as funções da conta de serviço, se necessário. A conta de serviço da VM predefinida usada pelas VMs do cluster do Dataproc tem as autorizações necessárias para criar e configurar a instância do Bigtable para o serviço de cronologia do YARN. Se criar o seu cluster de PHS ou de tarefas com uma conta de serviço de VM personalizada, a conta tem de ter a função Bigtable Administrator ou Bigtable User.

Esquema da tabela obrigatório

O suporte do PHS do Dataproc para o YARN Timeline Service v2 requer um esquema específico criado na instância do Bigtable. O Dataproc cria o esquema necessário quando um cluster de tarefas ou um cluster PHS é criado com a propriedade dataproc:yarn.atsv2.bigtable.instance definida para apontar para a instância do Bigtable.

Segue-se o esquema da instância do Bigtable necessário:

Tabelas Famílias de colunas
prod.timelineservice.application c,i,m
prod.timelineservice.app_flow m
prod.timelineservice.entity c,i,m
prod.timelineservice.flowactivity i
prod.timelineservice.flowrun i
prod.timelineservice.subapplication c,i,m

Recolha de lixo do Bigtable

Pode configurar a recolha de lixo do Bigtable com base na idade para tabelas do ATSv2:

  • Instale o cbt, (incluindo a criação do .cbrtc file).

  • Crie a política de recolha de lixo com base na idade do ATSv2:

export NUMBER_OF_DAYS = number \
cbt setgcpolicy prod.timelineservice.application c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.application i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.application m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.app_flow m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.flowactivity i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.flowrun i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication m maxage=${NUMBER_OF_DAYS}

Notas:

NUMBER_OF_DAYS: o número máximo de dias é 30d.