我有一个包含60个任务的DAG(PythonsOperators),在某些执行中,不同的任务被标记为失败,但是我不知道原因,当我转到“查看日志”时,该日志为空并且经过时红色方块显示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
)
答案 0 :(得分:0)
工人可能会死亡。我建议增加内存分配。
如果工人在缓冲区刷新之前死亡,则不会发出日志。没有日志的任务失败表明Airflow工作人员由于内存不足(OOM)而重新启动。 您可以在Task fails without emitting logs处阅读更多内容。
答案 1 :(得分:0)
这发生在我身上。我发现一些工作节点的磁盘空间不足,因此它们由于无法写入日志而导致任务失败。
进入工作节点的 Docker 容器并在 logs/worker.log 中搜索“设备上没有剩余空间”。
如果是这种情况,有几种简单的方法可以缓解:
从长远来看,进行日志轮换或自动清理日志文件(最旧的在前)可能是值得的。