我在一个团队中工作,该团队使用大型云提供商之一来托管我们所做的工作。每天早上,在上班之前,我都有一份计划好的工作,该工作代表着该云中的开发环境,每天晚上,我都有一份计划好的工作,这又一次将所有工作都拆散了。该开发环境包括Apache Airflow的一个实例,而工作要做的另一件事是运行包含一个任务的Airflow DAG。
我对该DAG遇到一个间歇性问题,DAG将运行,但有时该任务的任务实例无法调度。今天早上发生了,这是任务实例的详细信息:
在这种情况下:
我有一个简单的方法来解决此问题,我去重新启动了气流调度程序(由于我们已将气流设置为作为linux服务运行,因此涉及到安装了气流的VM上ssh'并发出{ {1}})。完成此任务后,任务实例将立即开始执行。
正如我所说的,这个问题是间歇性的,即我无法确定根本原因,有些早晨一切正常,有时会像这样卡住。今天早晨卡住了。
我读过Why isn't my task getting scheduled?,引起我注意的一件事是:
您的开始日期设置正确吗?通过start_date + schedule_interval后,Airflow计划程序会立即触发任务。
我刚刚看过该任务,它的systemctl restart airflow-scheduler
是start_date
:
DAG的None
为schedule_interval
,因为我们不安排此DAG,而是手动触发它(这是我早上的工作):
因此,该任务没有None
,而DAG的start_date
是schedule_interval
,这说明了为什么它没有运行,但没有解释为什么有些它确实运行了几天,但有时却没有。
我刚刚离开并重新启动了调度程序服务(如上所述),任务现在正在运行。再次查看任务实例的详细信息,它现在获得了None
:
我不清楚为什么重新启动调度程序会导致任务实例开始运行。任何人都可以提出原因吗?我承认我对start_date
不太了解。
更新2020-04-21:一位同事引起了我的注意,一个听起来相似(但可能不尽相同)的错误:AIRFLOW-1641 - Task gets stuck in queued state。该问题已在气流1.9中修复,我们目前正在使用气流1.8.1,但很快将升级到气流1.10。
答案 0 :(得分:1)
您是正确的,重新启动调度程序不应更改dag的开始日期。我想知道您的工作中是否存在一个小的逻辑错误,该错误最初会创建气流实例和dag。听起来如果您的工作有一个开始日期,一切都会很好。您无需深入了解为什么重新启动调度程序就能使其正常工作。