我正在使用airflow cli的backfill
命令来手动运行一些回填作业。
airflow backfill mydag -i -s 2018-01-11T16-00-00 -e 2018-01-31T23-00-00 --reset_dagruns --rerun_failed_tasks
dag间隔是每小时一次,大约有40个任务。因此,这种回填工作需要一天以上的时间才能完成。我需要它在没有监督的情况下运行。但是,我注意到,即使一项任务在回填间隔中的一次运行中失败,整个回填作业也会停止,但有以下异常,因此我不得不再次手动重新启动它。
Traceback (most recent call last):
File "/home/ubuntu/airflow/bin/airflow", line 4, in <module>
__import__('pkg_resources').run_script('apache-airflow==1.10.0', 'airflow')
File "/home/ubuntu/airflow/lib/python3.5/site-packages/pkg_resources/__init__.py"
, line 719, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/home/ubuntu/airflow/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1504, in run_script
exec(code, namespace, namespace)
File "/home/ubuntu/airflow/lib/python3.5/site-packages/apache_airflow-1.10.0-py3.
5.egg/EGG-INFO/scripts/airflow", line 32, in <module>
args.func(args)
File "/home/ubuntu/airflow/lib/python3.5/site-packages/apache_airflow-1.10.0-py3.5.egg/airflow/utils/cli.py", line 74, in wrapper
return f(*args, **kwargs)
File "/home/ubuntu/airflow/lib/python3.5/site-packages/apache_airflow-1.10.0-py3.
5.egg/airflow/bin/cli.py", line 217, in backfill
rerun_failed_tasks=args.rerun_failed_tasks,
File "/home/ubuntu/airflow/lib/python3.5/site-packages/apache_airflow-1.10.0-py3.5.egg/airflow/models.py", line 4105, in run
job.run()
File "/home/ubuntu/airflow/lib/python3.5/site-packages/apache_airflow-1.10.0-py3.
5.egg/airflow/jobs.py", line 202, in run
self._execute()
File "/home/ubuntu/airflow/lib/python3.5/site-packages/apache_airflow-1.10.0-py3.5.egg/airflow/utils/db.py", line 74, in wrapper
return func(*args, **kwargs)
File "/home/ubuntu/airflow/lib/python3.5/site-packages/apache_airflow-1.10.0-py3.
5.egg/airflow/jobs.py", line 2533, in _execute
airflow.exceptions.AirflowException:
Some task instances failed:
{('mydag', 'a_task', datetime.datetime(2018, 1, 30, 17, 5, tzinfo=psy
copg2.tz.FixedOffsetTimezone(offset=0, name=None)))}
任务实例不依赖于先前的实例,因此我不介意一个或两个任务失败。我需要这份工作才能继续。
我在documentation of backfill中找不到任何允许我指定此行为的选项。
有没有一种方法可以实现我想要的?
答案 0 :(得分:0)
如果我正确理解了您的问题,则可以通过设置
来实现您寻求的行为'depends_on_past': False
在DAG参数中。
来源:https://airflow.incubator.apache.org/tutorial.html#backfill
答案 1 :(得分:0)
将--donot_pickle
开关添加到backfill
命令may help。
答案 2 :(得分:0)
使用backfill命令遇到了相同的问题。
尝试了--donot_pickle选项,并将depends_on_past设置为False,但未成功。
可能的解决方法::为DAG设置开始日期,并且catchup = True,然后在网络GUI中将其取消暂停。这就像回填一样。
如果超过1个DAG运行被标记为失败,我将无法获得回填CLI命令来继续运行。
答案 3 :(得分:0)
据我了解,当队列中的任务失败时,回填将停止执行。
对我有用的一个技巧是,无论是否失败,都将需要运行的所有任务加载到队列中。也就是说,我将max_active_runs增加到一个荒谬的数字,以便执行所有dag运行。
例如
max_active_runs: 1000
检查airflow documentation有关dag的默认参数。