Cómo pausar un trabajo de Dataflow

Usa la opción de servicio pause-on-failure para conservar el estado de tus trabajos por lotes de Dataflow. Esta función te permite pausar la ejecución del trabajo, abordar problemas externos a la canalización y reanudar el procesamiento sin perder el trabajo completado. Cuando se pausa un trabajo con esta función, no puedes cambiar el código de la canalización ni las configuraciones de la VM de trabajador, como el tipo de máquina.

Si habilitas esta capacidad, puedes administrar mejor los costos de los recursos y mejorar la confiabilidad del trabajo durante las interrupciones temporales o las restricciones de cuota. También puedes mantener el control sobre el ciclo de vida de la canalización si configuras las duraciones máximas de pausa cuando habilitas pause-on-failure. También puedes pausar o reanudar de forma manual las canalizaciones que tienen habilitada la marca pause-on-failure.

Beneficios de pause-on-failure

La opción de servicio pause-on-failure te permite conservar el progreso del trabajo por lotes durante las interrupciones, lo que reduce el tiempo total de procesamiento y el gasto de recursos.

  • Retención de puntos de control: Cuando falla un trabajo, puedes reanudarlo desde el último punto de control registrado en lugar de reiniciarlo desde el principio. Esto evita la necesidad de volver a procesar los bloques de datos completados, lo que significa que no tienes que pagar para rehacer el trabajo que se completó correctamente.
  • Mitiga las dependencias externas: Protege tus canalizaciones de problemas transitorios, como interrupciones temporales o límites de frecuencia en servicios externos. Pausar el trabajo te da la oportunidad de abordar la causa raíz antes de reanudar la ejecución sin perder el trabajo completado.
  • Controla las fallas no deterministas: Para las cargas de trabajo propensas a fallas intermitentes o no deterministas, esta opción te permite asegurar el progreso incremental en cada intento secuencial, lo que evita la falla total del trabajo.
  • Administra los recursos y la cuota: Pausa los trabajos por lotes de menor prioridad para liberar temporalmente la cuota o reasignar recursos de alto valor, como GPUs o TPUs, a cargas de trabajo urgentes, como el entrenamiento de modelos de aprendizaje automático o la inferencia, sin perder su progreso de referencia.

Asistencia y limitaciones

La pausa de un trabajo (de forma manual o en caso de falla) tiene los siguientes requisitos y limitaciones:

Comportamiento del trabajo pause-on-failure

Cuando habilitas la función pause-on-failure, tu trabajo se pausa automáticamente después de que un elemento de trabajo falla cuatro veces. Estas fallas se identifican en tus registros como mensajes de trabajo que contienen Error message from worker y mensajes de trabajador que contienen Completed work item ITEM_NUMBER UNSUCCESSFULLY. Otros tipos de fallas, como las faltas de stock y los errores de cuota, no activan una pausa automática. En cambio, estas fallas hacen que el trabajo falle como de costumbre. Habilitar pause-on-failure también te permite pausar un trabajo de forma manual.

Transiciones de estado del trabajo

Cuando se pausa un trabajo de Dataflow, pasa por los siguientes estados:

  1. Pausing: Es un estado intermedio en el que el trabajo detiene el procesamiento, borra las VMs de trabajador y archiva el estado de backend. Se te seguirá facturando por las VMs hasta que el servicio termine de borrarlas.
  2. En pausa: El trabajo se detiene por completo. En este punto, solo se te factura por los datos de Shuffle archivados.

Comportamientos excepcionales

Pause-on-failure podría comportarse de forma inesperada en las siguientes situaciones:

  • Si pausas de forma manual un trabajo que está a punto de completarse, es posible que se complete en lugar de pausarse.
  • En muy pocas circunstancias, es posible que un trabajo no se pause. En estos casos, el trabajo vuelve a un estado en ejecución si lo pausaste de forma manual, o bien entra en un estado con errores si el trabajo se pausa debido a un error.

Reanudar el procesamiento

Cuando se reanuda el trabajo, el servicio controla los elementos de trabajo de la siguiente manera:

  • Trabajo completado: El servicio no vuelve a procesar ninguna etapa ni elemento de trabajo que se haya terminado por completo cuando se pausó el trabajo.
  • Trabajo en curso: Cualquier elemento de trabajo que estaba en curso cuando se pausó el trabajo se vuelve a procesar desde el principio.
  • Recuentos de fallas: Todos los recuentos de fallas de elementos de trabajo se restablecen a cero, lo que significa que tu trabajo no se volverá a pausar automáticamente hasta que un elemento de trabajo falle cuatro veces más.

Habilita pause-on-failure

Para habilitar pause-on-failure para tu trabajo, usa la opción de servicio pause_on_failure de Dataflow cuando ejecutes el trabajo.

Java

--dataflowServiceOptions=pause_on_failure

Python

--dataflow_service_options=pause_on_failure

Go

--dataflow_service_options=pause_on_failure

Especifica una duración máxima de pausa

De forma predeterminada, tu trabajo permanecerá en pausa hasta por 7 días (7d). Puedes configurar de forma manual esta duración máxima de pausa para que esté entre 1 hora (1h) y 7 días (7d).

Solo se admiten d (días) y h (horas). Un día se define como 24 horas. Es posible que esto no coincida con la duración de un día calendario debido a factores como el horario de verano.

Una vez que pasa la duración máxima de pausa, se cancela el trabajo y ya no se puede reanudar.

Por ejemplo, el siguiente ejemplo establece la duración máxima de pausa en 1 día:

Java

--dataflowServiceOptions=pause_on_failure=pause_duration:1d

Python

--dataflow_service_options=pause_on_failure=pause_duration:1d

Go

--dataflow_service_options=pause_on_failure=pause_duration:1d

Pausa un trabajo de Dataflow de forma manual

Para pausar un trabajo de forma manual, realiza los siguientes pasos.

Console

  1. Ve a la página Trabajos de Dataflow.

    Ir a Trabajos

  2. Haz clic en el trabajo que deseas pausar.

    Para detener un trabajo, su estado debe ser En ejecución.

  3. En la página de detalles del trabajo, haz clic en Pausar.

    Si no ves el botón Pausar, no se puede pausar el trabajo debido a las limitaciones de pause-on-failure.

gcloud

Para pausar un trabajo de Dataflow, puedes usar el gcloud dataflow jobs comando en el Cloud Shell o en una terminal local instalada con la gcloud CLI.

  1. Abre tu shell.

  2. Enumera los IDs de los trabajos de Dataflow que se están ejecutando y, luego, toma nota del ID del trabajo que deseas pausar:

    gcloud dataflow jobs list
    

    Si no configuras la marca --region, se muestran los trabajos de Dataflow de todas las regiones disponibles.

  3. Ejecuta lo siguiente:

    gcloud dataflow jobs pause JOB_ID --region=REGION
    

    Reemplaza JOB_ID por el ID del trabajo que anotaste y REGION por la región del trabajo.

API

Para pausar un trabajo con la API de REST de Dataflow, usa el projects.locations.jobs.update extremo y pasa el siguiente cuerpo de la solicitud:

{
  "requestedState": "JOB_STATE_PAUSING"
}

Importante: No pases JOB_STATE_PAUSED como requestedState por accidente.

Cancela un trabajo de Dataflow en pausa o en proceso de pausa

Puedes cancelar un trabajo de Dataflow en pausa o en proceso de pausa como de costumbre. Después de cancelar un trabajo, ya no se te factura por él, pero ya no se puede reanudar.

Un trabajo pausado se cancela automáticamente después de que vence su duración máxima de pausa.

Reanuda un trabajo de Dataflow

Para reanudar de forma manual el trabajo pausado, sigue estos pasos:

Console

  1. Ve a la página Trabajos de Dataflow.

    Ir a Trabajos

  2. Haz clic en el trabajo que deseas reanudar.

    Para reanudar un trabajo, su estado debe ser pausado (no en pausa).

  3. En la página de detalles del trabajo, haz clic en Reanudar.

gcloud

Para reanudar un trabajo de Dataflow, puedes usar el gcloud dataflow jobs comando en el Cloud Shell o en una terminal local instalada con la gcloud CLI.

  1. Abre tu shell.

  2. Enumera los IDs de los trabajos de Dataflow que están en pausa y, luego, toma nota del ID del trabajo que deseas reanudar:

    gcloud dataflow jobs list
    

    Si no configuras la marca --region, se muestran los trabajos de Dataflow de todas las regiones disponibles.

  3. Ejecuta lo siguiente:

    gcloud dataflow jobs resume JOB_ID --region=REGION
    

    Reemplaza JOB_ID por el ID del trabajo y REGION por la región del trabajo.

API

Para reanudar un trabajo con la API de REST de Dataflow, usa el projects.locations.jobs.update extremo y pasa el siguiente cuerpo de la solicitud:

{
  "requestedState": "JOB_STATE_RUNNING"
}

¿Qué sigue?