Ir para o conteúdo

Como soluciono o erro “Was the task killed externally” no Amazon MWAA?

5 minuto de leitura
0

Quero solucionar o erro “Was the task killed externally” no Amazon Managed Workflows for Apache Airflow (Amazon MWAA).

Breve descrição

O erro “Was the task killed externally” ocorre quando o estado de uma tarefa é diferente entre o banco de dados de metadados do Airflow e o iniciador da tarefa. A seguir estão as causas do erro:

  • O valor de task_queued_timeout foi atingido. O valor padrão é 600 segundos. Para versões anteriores do Apache Airflow, veja o valor de task_adoption_timeout. Para obter mais informações, consulte task_queued_timeout_check_interval no site do Apache Airflow.
  • A tarefa falhou devido à alta utilização de recursos do processamento.

Resolução

Verifique os logs do seu agendador

Conclua as etapas a seguir:

  1. Abra o console do Amazon CloudWatch.

  2. No painel de navegação, escolha Logs.

  3. Escolha Grupos de logs.

  4. Escolha o grupo de logs que você deseja visualizar.

  5. Escolha Pesquisar em todo o LogStream.

  6. Para pesquisar o período de falha na tarefa, atualize o intervalo de tempo. Além disso, filtre a pesquisa com seu ID de tarefa:

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

    Observação: substitua example-dag-name pelo nome do directed acyclic graph (DAG), example-task-name pelo nome da tarefa e example-time pelo período que você deseja usar.

  7. Identifique duas linhas de log nos resultados da pesquisa que fazem referência à sua tarefa:

    Veja a seguir um exemplo de sua tarefa em fila:

    [[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

    Veja a seguir um exemplo de sua tarefa interrompida:

    [[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

É possível solucionar problemas adicionais nos seguintes cenários.

A tarefa falhou devido a uma task_queued_timeout

Compare os registros de data e hora de quando você agendou sua tarefa e quando ela foi interrompida. Se a diferença for maior ou igual ao valor de task_queued_timeout, sua tarefa ficará na fila por muito tempo.

Para resolver esse problema, execute as seguintes ações:

  • Aumente o valor de task_queued_timeout para que as tarefas possam esperar mais tempo na fila sem um tempo limite.
  • Atualize para uma classe de ambiente mais alta para aumentar o número de vagas para trabalhadores de celery em cada contêiner de processamento. O número de tarefas simultâneas que podem ser executadas no ambiente é maxWorkers * celery.worker_autoscale.
  • Distribua a carga de DAGs e tarefas. Não execute vários DAGs ao mesmo tempo.
  • Verifique se seu agendador não está sobrecarregado. Se você tiver um agendador sobrecarregado, talvez as tarefas não sejam agendadas a tempo.

Observação: um aumento na contagem do agendador pode afetar a utilização do metadatabase e os tempos de análise. Mais agendadores aumentam a alta disponibilidade (HA), mas não adicionam mais recursos para o agendamento de tarefas. Se o valor de task_queued_timeout não for atingido, verifique seus logs de processamento.

Para verificar seus logs de processamentos, conclua as seguintes etapas:

  1. Acesse sua interface de usuário do Apache Airflow.
  2. Escolha um DAG.
  3. Selecione Grafo.
  4. Escolha uma tarefa executada.
  5. Escolha Detalhes da instância. Em seguida, anote o valor external_executor_id da sua tarefa.
  6. Abra o console do Amazon CloudWatch.
  7. No painel de navegação, escolha Logs.
  8. Escolha Grupos de logs.
  9. Escolha o grupo de logs que você deseja visualizar.
  10. Escolha Pesquisar em todo o LogStream.
  11. Para pesquisar o período de falha na tarefa, atualize o intervalo de tempo.
  12. Filtre a pesquisa com o valor external_executor_id para visualizar as linhas de log relacionadas à sua tarefa no trabalhador.
  13. Identifique as mensagens de erro relacionadas à sua tarefa. Para obter mais informações sobre os erros, escolha o nome do fluxo de logs.

A tarefa falhou devido à alta utilização da CPU ou da memória

Se você receber a mensagem de erro a seguir, seu funcionário tem problemas de utilização de recursos, como alta CPU ou RAM. Como resultado, o processamento de trabalho executado no contêiner de trabalho falha e sai 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 a mensagem de erro anterior, verifique as métricas CPUUtilization e MemoryUtilization. Se as métricas estão constantemente altas ou têm picos, seus processamentos do Amazon MWAA estão sobrecarregados.

Para resolver a sobrecarga de processamentos, execute as seguintes ações:

  • Diminua o valor de celery.worker_autoscale para reduzir o número de tarefas que são executadas simultaneamente em seu trabalhador.
  • Use uma classe de instância Amazon MWAA mais alta para obter mais RAM e vCPUs.
  • Reescreva seus DAGs para transferir a carga de workload computacional do Amazon MWAA para outras plataformas de computação.

Informações relacionadas

Práticas recomendadas no site do Apache Airflow