Monitorizar y depurar flujos de trabajo

En esta página se proporciona información para ayudarle a monitorizar y depurar flujos de trabajo de Dataproc.

Mostrar flujos de trabajo

Una WorkflowTemplate instanciada se denomina "flujo de trabajo" y se modela como una "operación".

Ejecuta el siguiente comando gcloud para enumerar los flujos de trabajo de tu proyecto:

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

A continuación, se muestra una solicitud de ejemplo para enumerar todos los flujos de trabajo iniciados a partir de una plantilla "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

Ten en cuenta que solo se usa la parte del UUID de OPERATION_NAME en las consultas posteriores.

Usar WorkflowMetadata

El campo operation.metadata proporciona información que le ayuda a diagnosticar errores en el flujo de trabajo.

Aquí tienes un ejemplo de WorkflowMetadata, que incluye un gráfico de nodos (trabajos) insertado en una operación:

{
  "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!

Recuperar una plantilla

Como se muestra en el ejemplo anterior, el metadata contiene el ID de la plantilla y la versión.

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

Si no se elimina una plantilla, se pueden recuperar versiones de plantilla instanciadas mediante una solicitud de descripción con versión.

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

Lista de operaciones de clústeres iniciadas por una plantilla:

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

A continuación se muestra una solicitud de ejemplo para enumerar los trabajos enviados desde una plantilla:

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 tareas enviadas desde una instancia de flujo de trabajo:

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

Tiempos de espera de flujos de trabajo

Puedes definir un tiempo de espera para el flujo de trabajo que lo cancele si los trabajos del flujo de trabajo no finalizan en ese periodo. El periodo de tiempo de espera se aplica al grafo acíclico dirigido (DAG) de las tareas del flujo de trabajo (la secuencia de tareas del flujo de trabajo), no a toda la operación del flujo de trabajo. El periodo de tiempo de espera empieza cuando se inicia el primer trabajo del flujo de trabajo. No incluye el tiempo necesario para crear un clúster gestionado. Si hay alguna tarea en ejecución al final del periodo de tiempo de espera, se detendrán todas las tareas en ejecución, se finalizará el flujo de trabajo y, si el flujo de trabajo se estaba ejecutando en un clúster gestionado, se eliminará el clúster.

Ventaja: usa esta función para no tener que finalizar manualmente un flujo de trabajo que no se completa debido a que los trabajos se han quedado bloqueados.

Definir un tiempo de espera de plantilla de flujo de trabajo

Puedes definir un periodo de tiempo de espera de la plantilla de flujo de trabajo cuando creas una plantilla de flujo de trabajo. También puedes añadir un tiempo de espera de flujo de trabajo a una plantilla de flujo de trabajo ya creada actualizando la plantilla de flujo de trabajo.

gcloud

Para definir un tiempo de espera de flujo de trabajo en una plantilla nueva, usa la marca --dag-timeout con el comando gcloud dataproc workflow-templates create. Puede usar los sufijos "s", "m", "h" y "d" para definir valores de duración en segundos, minutos, horas y días, respectivamente. La duración del tiempo de espera debe ser de entre 10 minutos ("10m") y 24 horas ("24h" o "1d").

gcloud 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 un tiempo de espera de un flujo de trabajo, completa el campo WorkflowTemplate dagTimeout como parte de una solicitud workflowTemplates.create.

Consola

Actualmente, la consola de Google Cloud no permite crear una plantilla de flujo de trabajo.

Actualizar el tiempo de espera de una plantilla de flujo de trabajo

Puedes actualizar una plantilla de flujo de trabajo para cambiar, añadir o quitar un tiempo de espera del flujo de trabajo.

gcloud

Añadir o cambiar el tiempo de espera de un flujo de trabajo

Para añadir o cambiar el tiempo de espera de un flujo de trabajo en una plantilla, usa la marca --dag-timeout con el comando gcloud dataproc workflow-templates set-dag-timeout. Puede usar los sufijos "s", "m", "h" y "d" para definir los valores de duración en segundos, minutos, horas y días, respectivamente. La duración del tiempo de espera debe ser de entre 10 minutos ("10m") y 24 horas ("24h").

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

Eliminar el tiempo de espera de un flujo de trabajo

Para quitar un tiempo de espera de un flujo de trabajo de una plantilla, usa el comando gcloud dataproc workflow-templates remove-dag-timeout.

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

API

Añadir o cambiar el tiempo de espera de un flujo de trabajo

Para añadir o cambiar el tiempo de espera de un flujo de trabajo en una plantilla, actualice la plantilla del flujo de trabajo rellenando el campo dagTimeout de la plantilla con el valor del tiempo de espera nuevo o modificado.

Eliminar el tiempo de espera de un flujo de trabajo

Para quitar el tiempo de espera de un flujo de trabajo de una plantilla, actualice la plantilla de flujo de trabajo quitando el campo dagTimeout de la plantilla.

Consola

Actualmente, la consola de Google Cloud no permite actualizar una plantilla de flujo de trabajo.