Como monitorar e depurar fluxos de trabalho

Nesta página, você aprenderá a monitorar e depurar os fluxos de trabalho do Dataproc.

Como listar fluxos de trabalho

Um WorkflowTemplate instanciado é chamado de "fluxo de trabalho" e é modelado como uma "operação".

Execute o seguinte comando gcloud para listar os fluxos de trabalho do seu projeto:

gcloud dataproc operations list \
    --region=region \
    --filter="operationType = WORKFLOW"
...
OPERATION_NAME                                                DONE
projects/.../operations/07282b66-2c60-4919-9154-13bd4f03a1f2  True
projects/.../operations/1c0b0fd5-839a-4ad4-9a57-bbb011956690  True

Veja um exemplo de solicitação para listar todos os fluxos de trabalho iniciados a partir de um modelo "terasort":

gcloud dataproc operations list \
    --region=region \
    --filter="labels.goog-dataproc-workflow-template-id=terasort"
...
OPERATION_NAME                                     DONE
projects/.../07282b66-2c60-4919-9154-13bd4f03a1f2  True
projects/.../1c0b0fd5-839a-4ad4-9a57-bbb011956690  True

Observe que somente a parte UUID de OPERATION_NAME é usada em consultas subsequentes.

Como usar o WorkflowMetadata

O campo operation.metadata fornece informações para ajudar você a diagnosticar falhas no fluxo de trabalho.

Veja um exemplo de WorkflowMetadata, incluindo um gráfico de nós (jobs), incorporados em uma operação:

{
  "name": "projects/my-project/regions/us-central1/operations/671c1d5d-9d24-4cc7-8c93-846e0f886d6e",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dataproc.v1.WorkflowMetadata",
    "template": "terasort",
    "version": 1,
    "createCluster": {
      "operationId": "projects/my-project/regions/us-central1/operations/8d472870-4a8b-4609-9f7d-48daccb028fc",
      "Done": true
    },
    "graph": {
      "nodes": [
        {
          "stepId": "teragen",
          "jobId": "teragen-vtrprwcgepyny",
          "state": "COMPLETED"
        },
        {
          "stepId": "terasort",
          "prerequisiteStepIds": [
            "teragen"
          ],
          "jobId": "terasort-vtrprwcgepyny",
          "state": "FAILED",
          "error": "Job failed"
        },
        {
          "stepId": "teravalidate",
          "prerequisiteStepIds": [
            "terasort"
          ],
          "state": "FAILED",
          "error": "Skipped, node terasort failed"
        }
      ]
    },
    "deleteCluster": {
      "operationId": "projects/my-project/regions/us-central1/operations/9654c67b-2642-4142-a145-ca908e7c81c9",
      "Done": true
    },
    "state": "DONE",
    "clusterName": "terasort-cluster-vtrprwcgepyny"
  },
  "done": true,
  "error": {
    "message": "Workflow failed"
  }
}
Done!

Como recuperar um modelo

Conforme mostrado no exemplo anterior, o metadata contém o ID do modelo e a versão.

"template": "terasort",
"version": 1,

Se um modelo não for excluído, as versões instanciadas do modelo poderão ser recuperadas por uma solicitação de descrição com versão.

gcloud dataproc workflow-templates describe terasort \
    --region=region \
    --version=1

Lista de operações de cluster iniciadas por um modelo:

gcloud dataproc operations list \
    --region=region \
    --filter="labels.goog-dataproc-workflow-instance-id = 07282b66-2c60-4919-9154-13bd4f03a1f2"
...
OPERATION_NAME                                     DONE
projects/.../cf9ce692-d6c9-4671-a909-09fd62041024  True
projects/.../1bbaefd9-7fd9-460f-9adf-ee9bc448b8b7  True

Veja abaixo um exemplo de solicitação para listar trabalhos enviados de um modelo:

gcloud dataproc jobs list \
    --region=region \
    --filter="labels.goog-dataproc-workflow-template-id = terasort"
...
JOB_ID                TYPE     STATUS
terasort2-ci2ejdq2ta7l6  pyspark  DONE
terasort2-ci2ejdq2ta7l6  pyspark  DONE
terasort1-ci2ejdq2ta7l6  pyspark  DONE
terasort3-3xwsy6ubbs4ak  pyspark  DONE
terasort2-3xwsy6ubbs4ak  pyspark  DONE
terasort1-3xwsy6ubbs4ak  pyspark  DONE
terasort3-ajov4nptsllti  pyspark  DONE
terasort2-ajov4nptsllti  pyspark  DONE
terasort1-ajov4nptsllti  pyspark  DONE
terasort1-b262xachbv6c4  pyspark  DONE
terasort1-cryvid3kreea2  pyspark  DONE
terasort1-ndprn46nesbv4  pyspark  DONE
terasort1-yznruxam4ppxi  pyspark  DONE
terasort1-ttjbhpqmw55t6  pyspark  DONE
terasort1-d7svwzloplbni  pyspark  DONE

Lista de jobs enviados de uma instância de fluxo de trabalho:

gcloud dataproc jobs list \
    --region=region \
    --filter="labels.goog-dataproc-workflow-instance-id = 07282b66-2c60-4919-9154-13bd4f03a1f2"
...
JOB_ID                TYPE     STATUS
terasort3-ci2ejdq2ta7l6  pyspark  DONE
terasort2-ci2ejdq2ta7l6  pyspark  DONE
terasort1-ci2ejdq2ta7l6  pyspark  DONE

Tempos limite de fluxo de trabalho

Você pode definir um tempo limite para cancelar o fluxo de trabalho se os jobs dele não forem concluídos dentro do período de tempo limite. O tempo limite se aplica ao gráfico acíclico direcionado (DAG, na sigla em inglês) dos jobs no fluxo de trabalho (a sequência de jobs no fluxo de trabalho), não a toda a operação do fluxo de trabalho. O período de tempo limite começa quando o primeiro job do fluxo de trabalho é iniciado. Ele não inclui o tempo necessário para criar um cluster gerenciado. Se algum job estiver em execução no final do tempo limite, todos os jobs em execução serão interrompidos, o fluxo de trabalho será encerrado e, se o fluxo de trabalho estiver em execução em um cluster gerenciado, o cluster será excluído.

Benefício: use esse recurso para evitar a necessidade de encerrar manualmente um fluxo de trabalho que não tenha sido concluído devido a jobs travados.

Como definir o tempo limite de um modelo de fluxo de trabalho

Você pode definir um período de tempo limite do modelo de fluxo de trabalho ao criar um modelo de fluxo de trabalho. Também é possível adicionar um tempo limite de fluxo de trabalho a um modelo de fluxo de trabalho existente atualizando o modelo de fluxo de trabalho.

Comando gcloud

Para definir um tempo limite de fluxo de trabalho em um novo modelo, use a sinalização --dag-timeout com o comando gcloud beta dataproc workflow-templates create. Use os sufixos "s", "m", "h" e "d" para definir os valores de duração de segundo, minuto, hora e dia, respectivamente. O tempo limite precisa ser de 10 minutos ("10m") a 24 horas ("24h" ou "1d").

gcloud beta dataproc workflow-templates create template-id (such as "my-workflow") \
    --region=region \
    --dag-timeout=duration (from "10m" to "24h" or "1d"") \
    ... other args ...

API

Para definir um tempo limite do fluxo de trabalho, preencha o campo WorkflowTemplate dagTimeout como parte de uma solicitação workflowTemplates.create.

Console

Atualmente, o Console do Google Cloud não é compatível com a criação de um modelo de fluxo de trabalho.

Como atualizar o tempo limite de um modelo de fluxo de trabalho

É possível atualizar um modelo de fluxo de trabalho existente para alterar, adicionar ou remover um tempo limite de um fluxo de trabalho.

Comando gcloud

Como adicionar ou alterar um tempo limite de fluxo de trabalho

Para adicionar ou alterar um tempo limite de fluxo de trabalho em um novo modelo, use a sinalização --dag-timeout com o comando gcloud beta dataproc workflow-templates set-dag-timeout. Use os sufixos "s", "m", "h" e "d" para definir os valores de duração de segundo, minuto, hora e dia, respectivamente. A duração do tempo limite precisa ser de 10 minutos ("10m") a 24 horas ("24h").

gcloud beta dataproc workflow-templates set-dag-timeout template-id (such as "my-workflow") \
    --region=region \
    --dag-timeout=duration (from "10m" to "24h" or "1d")

Como remover um tempo limite do fluxo de trabalho

Para remover um tempo limite do fluxo de trabalho de um modelo existente, use o comando gcloud beta dataproc workflow-models remove-dag-timeout.

gcloud beta dataproc workflow-templates remove-dag-timeout template-id (such as "my-workflow") \
    --region=region

API

Como adicionar ou alterar um tempo limite de fluxo de trabalho

Para adicionar ou alterar o tempo limite de um fluxo de trabalho em um modelo atual, atualize o modelo do fluxo de trabalho preenchendo o campo dagTimeout do modelo com o valor de tempo limite novo ou alterado.

Como remover um tempo limite do fluxo de trabalho

Para remover um tempo limite do fluxo de trabalho de um modelo existente, atualize o modelo de fluxo de trabalho removendo o campo dagTimeout do modelo.

Console

Atualmente, o Console do Google Cloud não é compatível com a atualização de um modelo de fluxo de trabalho.