【问题标题】:Airflow Task Failed without empty Log and doesn't send email气流任务失败,没有空日志并且不发送电子邮件
【发布时间】:2018-11-05 15:53:04
【问题描述】:

我有一个包含 60 个任务(PythonsOperators)的 DAG,在某些执行中,不同的任务被标记为失败,但我不知道原因,当我转到“查看日志”时,日志是空的,当我通过时红色方块上写着 Operator:null 是什么意思?

好像没有执行任务,但我不明白为什么。

问题是:

为什么 Airflow 将其标记为失败,但日志上没有显示执行? 如果标记为失败的任务,为什么它没有发送错误电子邮件?

这是与 dag 关联的 python 代码:

DEFAULT_ARGS = {
'owner': 'blablabla',
'depends_on_past': False,
'start_date': datetime(2018, 5, 8),
'catchup': False,
'email': ['mail@mail.com'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 3,
'max_active_runs': 1,
'retry_delay': timedelta(minutes=5)
}

dag = DAG('dag_name',
default_args=DEFAULT_ARGS,
schedule_interval='20 0 * * *')

mylist = get_codes_list()

for item in mylist:
healthcheckerName = 'healthchecker_' + item

healthchecker = PythonOperator(
dag=dag,
task_id=healthcheckerName,
python_callable=prime_ops.check_last_budget_calculation(item),
queue=SPECIFIC_QUEUE,
pool=DEFAULT_PPC_POOL
)

【问题讨论】:

    标签: task operator-keyword airflow


    【解决方案1】:

    工人可能会死。我建议增加内存分配。

    如果一个工作人员在缓冲区刷新之前死亡,则不会发出日志。没有日志的任务失败表明 Airflow 工作人员由于内存不足 (OOM) 而重新启动。 你可以在这里阅读更多内容Task fails without emitting logs

    【讨论】:

    • 这个工人在哪里?我如何检查这是否确实是原因>
    【解决方案2】:

    这发生在我身上。我发现一些工作节点磁盘空间不足,因此他们无法完成任务,因为他们无法写入日志。

    进入工作节点的 Docker 容器并在 logs/worker.log 中搜索“设备上没有剩余空间”。

    如果是这种情况,有几种简单的方法可以缓解:

    1. 手动删除某个日期之前的日志文件;或
    2. 杀死并重新启动受影响的 Docker 容器。这就是我们最终要做的。如果您这样做,您确实会丢失所有工作人员日志。

    从长远来看,进行日志轮换或自动清理日志文件(最旧的优先)可能是值得的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2016-11-05
      • 2019-01-20
      相关资源
      最近更新 更多