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:
- El trabajo de Dataflow debe ser un trabajo por lotes.
- El trabajo debe usar Dataflow shuffle.
- Debes especificar la
pause_on_failureopción de servicio cuando ejecutas el trabajo. - El trabajo no debe haber fallado antes para pausarse.
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:
- 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.
- 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
Ve a la página Trabajos de Dataflow.
Haz clic en el trabajo que deseas pausar.
Para detener un trabajo, su estado debe ser En ejecución.
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.
Abre tu shell.
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 listSi no configuras la marca
--region, se muestran los trabajos de Dataflow de todas las regiones disponibles.Ejecuta lo siguiente:
gcloud dataflow jobs pause JOB_ID --region=REGIONReemplaza 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
Ve a la página Trabajos de Dataflow.
Haz clic en el trabajo que deseas reanudar.
Para reanudar un trabajo, su estado debe ser pausado (no en pausa).
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.
Abre tu shell.
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 listSi no configuras la marca
--region, se muestran los trabajos de Dataflow de todas las regiones disponibles.Ejecuta lo siguiente:
gcloud dataflow jobs resume JOB_ID --region=REGIONReemplaza 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?
- Obtén información para detener una canalización en ejecución.
- Comprende Dataflow Shuffle para trabajos por lotes, que es necesario para usar esta función.
- Consulta la guía Soluciona problemas de canalizaciones para resolver errores.
- Obtén información para solucionar problemas de trabajos por lotes lentos o bloqueados.