我运行了以下测试命令:
airflow test events {task_name_redacted} 2018-12-12
...并得到以下输出:
Dependencies not met for <TaskInstance: events.{redacted} 2018-12-12T00:00:00+00:00 [None]>, dependency 'Task Instance Slots Available' FAILED: The maximum number of running tasks (16) for this task's DAG 'events' has been reached.
[2019-01-17 19:47:48,978] {models.py:1556} WARNING -
--------------------------------------------------------------------------------
FIXME: Rescheduling due to concurrency limits reached at task runtime. Attempt 1 of 6. State set to NONE.
--------------------------------------------------------------------------------
[2019-01-17 19:47:48,978] {models.py:1559} INFO - Queuing into pool None
我的Airflow的最大并发配置为16。这是否意味着当DAG当前正在运行并且已使用所有任务插槽时,我无法测试任务?
此外,从文档中还不清楚,但是airflow test
是否确实执行了任务,就好像它是SparkSubmitOperator
一样,它实际上会提交任务?
答案 0 :(得分:0)
虽然我还没有达到并发至关重要的部署阶段,但是docs确实很好地表明了手头的问题
由于在任何时间都只有一个scheduler
在运行(和you shouldn't be running multiple anyways),所以实际上似乎不管DAG
-是否运行是实时-运行或测试-运行,此限制将共同适用于它们。因此,这当然是一个障碍。
#调度程序允许并发运行的任务实例数
dag_concurrency = 16
但是请注意,仅增加此数目(假设您有足够大的 box 用于容纳大量worker
/多个worker
的盒子),其他几种配置将还必须进行调整,以实现我想要的那种并行性。
它们全部列在[core]
部分
#作为执行程序设置的并行度。这个 定义应运行的任务实例的最大数量 在此气流装置上同时进行
并行度= 32
#不使用池时,任务在“默认池”中运行,默认池的 大小由此配置元素决定
non_pooled_task_slot_count = 128
#每个DAG的最大活动DAG运行次数
max_active_runs_per_dag = 16
但是我们仍然不在那里,因为一旦您同时产生了这么多任务,后端 metadata -db就会开始阻塞。尽管这可能是一个小问题(除非您的任务中有DAG
interactions 个很大的Variable
/非常大的executor
/很大的问题,否则它不会影响),但它仍然值得一提的潜在障碍
#SqlAlchemy池大小是数据库的最大数目 池中的连接。 0表示没有限制。
sql_alchemy_pool_size = 5
#SqlAlchemy池回收是连接的秒数 可以在无效之前在池中空闲。此配置不 适用于sqlite。如果曾经超过数据库连接数,则 较低的配置值将使系统恢复更快。
sql_alchemy_pool_recycle = 1800
#在多少秒后重试重新建立数据库连接 断开连接。将此设置为0将禁用重试。
sql_alchemy_reconnect_timeout = 300
不用说,除非您选择正确的SequentialExecutor
,否则所有这一切都是徒劳的; depends_on_past
,特别是仅用于测试
#气流应使用的执行程序类。选项包括SequentialExecutor,LocalExecutor,CeleryExecutor,DaskExecutor, KubernetesExecutor
执行者= SequentialExecutor
BaseOperator
像wait_for_downstream
,Airflow
一样也破坏了党派Spark
+ print(re.sub(r'[^0-9a-zA-Z ]+', '', re.sub(r'\s+', ' ', s)))
组合相关的链接:How to submit Spark jobs to EMR cluster from Airflow? (如果答案比您对您的困惑更深,请原谅我,但是..)