Saltar al contenido

¿Cómo soluciono el error «Was the task killed externally» en Amazon MWAA?

5 minutos de lectura
0

Quiero solucionar el error «Was the task killed externally» en Amazon Managed Workflows para Apache Airflow (Amazon MWAA).

Descripción corta

El error «Was the task killed externally» se produce cuando el estado de una tarea es diferente entre la base de datos de metadatos de Airflow y el iniciador de la tarea. Las causas del error son las siguientes:

  • Se ha alcanzado el valor task_queued_timeout. El valor predeterminado es 600 segundos. Para las versiones anteriores de Apache Airflow, consulta el valor task_adoption_timeout. Para obtener más información, consulta task_queued_timeout_check_interval en el sitio web de Apache Airflow.
  • La tarea falló debido a la alta utilización de recursos por parte del trabajador.

Resolución

Comprobación de los registros del programador

Sigue estos pasos:

  1. Abre la consola de Amazon CloudWatch.

  2. En el panel de navegación, elige Registros.

  3. Elige Grupos de registro.

  4. Elige el grupo de registros que desees visualizar.

  5. Selecciona Buscar en todos los LogStream.

  6. Para buscar el periodo de tiempo en el que se produjo el error de la tarea, actualiza el intervalo de tiempo. Además, filtra la búsqueda con tu ID de tarea:

    "example-dag-name.example-task-name manual__example-time-202X-XX-XXTXX:XX:XX.758774+00:00"

    Nota: Sustituye example-dag-name por el nombre de tu gráfico acíclico dirigido (DAG), example-task-name por el nombre de la tarea y example-time por el periodo de tiempo que deseas usar.

  7. Identifica dos líneas de registro en los resultados de la búsqueda que hagan referencia a tu tarea:

    A continuación, se muestra un ejemplo de la tarea en cola:

    [[34m**2024-01-17T11:19:07.487+0000**[0m] [34mscheduler_job_runner.py:[0m713 INFO[0m - Setting external_id for <TaskInstance: dag_name.task_name manual__202X-XX-XXTXX:XX:XX.758774+00:00[queued]> to 8b49b168-992d-4db6-bdc7-a143d55720c8[0m

    A continuación, se muestra un ejemplo de la tarea detenida:

    [[34m**2024-01-17T11:30:18.936+0000**[0m] [34mscheduler_job_runner.py:[0m771 ERROR[0m - Executor reports task instance <TaskInstance: dag_name.task_name manual__202X-XX-XXTXX:XX:XX.758774+00:00 [queued]> finished (failed) although the task says it's queued. (Info: None) Was the task killed externally?[0m

Puedes seguir solucionando los problemas en las siguientes situaciones.

La tarea falló debido a task_queued_timeout

Compara las marcas de tiempo de cuándo programaste la tarea y cuándo se detuvo la tarea. Si la diferencia es mayor o igual que el valor task_queued_timeout, significa que la tarea está en cola durante demasiado tiempo.

Para solucionar este problema, toma las siguientes medidas:

  • Aumenta el valor de tiempo de espera de task_queued_timeout para que las tareas puedan esperar más tiempo en la cola sin que se agote el tiempo de espera.
  • Actualiza a una clase de entorno superior para aumentar la cantidad de ranuras del trabajador de Celery en cada contenedor de trabajadores. La cantidad de tareas simultáneas que se pueden ejecutar en el entorno es maxWorkers * celery.worker_autoscale.
  • Distribuye la carga de DAG y tareas. No ejecutes varios DAG a la vez.
  • Comprueba que tu programador no esté sobrecargado. Si tienes un programador sobrecargado, es posible que las tareas no se programen a tiempo.

Nota: Un aumento del número de programadores podría afectar a los tiempos de uso y análisis de la metabase de datos. Más programadores aumentan la alta disponibilidad (HA), pero no agregan más recursos para la programación de tareas. Si no se alcanza el valor de task_queued_timeout, comprueba los registros de tus trabajadores.

Para comprobar los registros de tus trabajadores, sigue estos pasos:

  1. Accede a la interfaz de usuario de Apache Airflow.
  2. Elige un DAG.
  3. Selecciona Gráfico.
  4. Elige una ejecución de tarea.
  5. Selecciona Detalles de la instancia. A continuación, anota el valor de external_executor_id de tu tarea.
  6. Abre la consola de Amazon CloudWatch.
  7. En el panel de navegación, elige Registros.
  8. Elige Grupos de registro.
  9. Elige el grupo de registros que desees visualizar.
  10. Selecciona Buscar en todos los LogStream.
  11. Para buscar el periodo de tiempo en el que se produjo el error de la tarea, actualiza el intervalo de tiempo.
  12. Filtra la búsqueda con el valor external_executor_id para ver las líneas de registro relacionadas con tu tarea en el trabajador.
  13. Identifica los mensajes de error relacionados con tu tarea. Para obtener más información sobre los errores, elige el nombre de la secuencia de registro.

La tarea falló debido a un uso elevado de la CPU o la memoria

Si recibes el siguiente mensaje de error, significa que tu trabajador tiene problemas de utilización de los recursos, como un exceso de CPU o RAM. Como resultado, el proceso de trabajo que se ejecuta en el contenedor de trabajadores falla y finaliza prematuramente.

"[2023-07-26 13](tel:2023072613):00:49,356: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: signal 15 (SIGTERM) Job: 1049.')"

Para solucionar el mensaje de error anterior, comprueba las métricas CPUUtilization y MemoryUtilization. Si las métricas son constantemente altas o tienen picos, tus trabajadores de Amazon MWAA están sobrecargados.

Para resolver la sobrecarga de trabajo de los trabajadores, toma las siguientes medidas:

  • Reduce el valor celery.worker_autoscale para reducir la cantidad de tareas que se ejecutan simultáneamente en tu trabajador.
  • Utiliza una clase de instancia de Amazon MWAA superior para obtener más RAM y vCPU.
  • Reescribe tus DAG para transferir la carga de trabajo de computación de Amazon MWAA a otras plataformas de computación.

Información relacionada

Prácticas recomendadas en el sitio web de Apache Airflow