Airflow 当通过WebUI触发时,气流DAG将以递归错误方式爆炸 在对当前工作流进行重大重构/重写后,我正在测试更改 我仍然在LocalExecutor上,因为我的所有任务都在远程机器上执行一些命令(没有在同一台机器上执行实际的计算) DAG是通过python脚本生成的,该脚本读取本地存储的JSON文件(文件中每个JSON对象一个DAG)
经过几天的重写,我能够以上述方式(编程方式)生成我的DAGAirflow 当通过WebUI触发时,气流DAG将以递归错误方式爆炸 在对当前工作流进行重大重构/重写后,我正在测试更改 我仍然在LocalExecutor上,因为我的所有任务都在远程机器上执行一些命令(没有在同一台机器上执行实际的计算) DAG是通过python脚本生成的,该脚本读取本地存储的JSON文件(文件中每个JSON对象一个DAG),airflow,Airflow,经过几天的重写,我能够以上述方式(编程方式)生成我的DAG 然而,当试图通过UI触发DAG时(在测试期间,我设置了schedule\u interval=Noneso触发器是手动的),DAG爆炸(核弹文本图像),并可能从以下堆栈跟踪(参见完整堆栈跟踪)抛出: 一旦我通过WebUI将Dag标记为失败,调度程序日志中的上述stacktrace就会消失(该Dag的TaskInstances将继续存在于Airflow的meta db中,除非我使用delete from..SQL查询手动删除它们)
然而,当试图通过UI触发DAG时(在测试期间,我设置了
schedule\u interval=None
so触发器是手动的),DAG爆炸(核弹文本图像),并可能从以下堆栈跟踪(参见完整堆栈跟踪)抛出:
一旦我通过WebUI将Dag标记为失败,调度程序日志中的上述stacktrace就会消失(该Dag的
TaskInstance
s将继续存在于Airflow的meta db中,除非我使用delete from..
SQL查询手动删除它们)
我试过几件事都没有成功
- 确定我的部署仍然完好无损(旧工作流的DAG仍在正常运行)
- 多次关闭并重新启动Airflow的
&计划程序
Web服务器
db
- 检查气流.cfg文件是否存在任何差异
我正在使用
Python
(通过安装)3.7.3
带有气流1.10.3
LocalExecutor
Linux ip XXX XX XX XX 4.9.0-8-amd64#1 SMP Debian 4.9.130-2(2018-10-27)x86_64 GNU/Linux
我不小心使用了操作符类中定义的一个方法,
on_failure_callback
,因此该kill_task()
方法的self
参数导致了递归错误
和DAG的爆炸
class MyCustomOperator(BaseOperator):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.on_failure_callback = self.kill_task
..
def kill_task(self) -> None:
// do some cleanup work
将kill_task()
方法移到类之外解决了问题看起来我的工作流中有几个不同的问题。scheduler
日志中的“int”和“NoneType”实例之间不支持“>=”TypeError,因为我的代码(从JSON文件读取配置)无意中将max\u active\u runs=None
传递给DAG对象,即(我们应该不传递任何内容,而不是显式传递None
). 我还没有解决递归错误
您是否显示了任务顺序代码?例如,task\u a>>task\u b
..@完全被摧毁,请查找的“任务订单代码”
。此外,我忘了通知,一旦问题得到解决,Dag就开始运行,即任务正在执行(但在我触发它的那一刻,它仍然会显示带有递归错误的核弹屏幕=>即使它在后台开始正常运行),这是指向apache邮件列表上相应线程的链接。您创建的两个自定义运算符中可能存在错误。你能试着把它们注释掉(或者用DummyOperator替换掉)看看问题是否仍然存在。谢谢。犯了完全相同的错误。你为我节省了很多时间。
[2019-12-24 06:27:32,851] {jobs.py:1446} INFO - Processing derived_tables_presto_cbot_events_1
[2019-12-24 06:27:32,855] {jobs.py:921} INFO - Examining DAG run <DagRun derived_tables_presto_cbot_events_1 @ 2019-12-23 13:08:36.747641+00:00: manual__2019-12-23T13:08:36.747641+00:00, externally triggered: True>
[2019-12-24 06:27:32,856] {jobs.py:410} ERROR - Got an exception! Propagating...
Traceback (most recent call last):
File "/home/admin/.pyenv/versions/3.7.3/lib/python3.7/site-packages/airflow/jobs.py", line 402, in helper
pickle_dags)
File "/home/admin/.pyenv/versions/3.7.3/lib/python3.7/site-packages/airflow/utils/db.py", line 73, in wrapper
return func(*args, **kwargs)
File "/home/admin/.pyenv/versions/3.7.3/lib/python3.7/site-packages/airflow/jobs.py", line 1760, in process_file
self._process_dags(dagbag, dags, ti_keys_to_schedule)
File "/home/admin/.pyenv/versions/3.7.3/lib/python3.7/site-packages/airflow/jobs.py", line 1451, in _process_dags
self._process_task_instances(dag, tis_out)
File "/home/admin/.pyenv/versions/3.7.3/lib/python3.7/site-packages/airflow/utils/db.py", line 73, in wrapper
return func(*args, **kwargs)
File "/home/admin/.pyenv/versions/3.7.3/lib/python3.7/site-packages/airflow/jobs.py", line 930, in _process_task_instances
if len(active_dag_runs) >= dag.max_active_runs:
TypeError: '>=' not supported between instances of 'int' and 'NoneType'
class MyCustomOperator(BaseOperator):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.on_failure_callback = self.kill_task
..
def kill_task(self) -> None:
// do some cleanup work