对于一项任务,有许多辅助任务 - 从文件/数据库获取/保存属性、验证、审核。这些辅助方法并不耗时。
一个样本 DAG 流,
fetch_data >> actual_processing >> validation >> save_data >> audit
这种情况下的建议是什么:
- 为每个辅助任务创建一个任务
- 将所有内容都放在一项任务中?
假设有足够的资源,气流任务的开销是多少?
问题1
这个场景有什么推荐
始终尝试在单个任务中保留最多的东西(最好有fat运行时间超过几分钟的任务lean运行几秒钟的任务)到(并非详尽列表)
此规则的例外情况可能是(并非详尽列表)
-
1. when 幂等性规定您必须将任务分解为更小的步骤,以防止浪费的重新计算/破坏工作流程,如使用运算符 https://airflow.apache.org/docs/stable/howto/operator/index.html doc
一个操作符代表一个单一的、理想情况下幂等的任务
-
2.特殊情况,例如您正在使用pools https://airflow.apache.org/docs/stable/concepts.html#pools限制外部资源的负载 => 在这种情况下,每个涉及外部资源的操作都必须建模为单独的任务,以便通过以下方式强制执行负载限制
pool
s
问题2
假设有足够的资源,气流任务的开销是多少?
虽然我无法在这里提供技术上精确的答案,但请理解 Airflow 的调度程序本质上是在基于民意调查的方法
- at every heartbeat (usually ~ 20-30 s), it scans meta-db and
DagBag
to determine the list of task
s that are ready to run for e.g. like
- a
scheduled
上游任务已运行的任务
- an
up_for_retry
任务是谁retry_delay
已过期
来自old docs https://airflow.apache.org/docs/1.10.1/scheduler.html#:%7E:text=The%20Airflow%20scheduler%20monitors%20all,whether%20they%20can%20be%20triggered.
Airflow调度器监控所有任务和所有DAG,并触发
其依赖关系已得到满足的任务实例。在...后面
场景,它监视并与所有 DAG 的文件夹保持同步
它可能包含的对象,并定期(每分钟左右)检查
活动任务以查看它们是否可以被触发。
- 这意味着拥有更多
task
s(以及更多连接 / 依赖关系它们之间)会增加调度程序的工作量(需要评估更多检查)
建议阅读
- Airflow Scheduler 调度后续任务的速度很慢 https://stackoverflow.com/q/47450855/3679900
- 当气流不够快时 https://medium.com/@manuelmourato25/when-airflow-isnt-fast-enough-distributed-orchestration-of-multiple-small-workloads-with-celery-afb3daebe611
- 使用 Airflow 执行频繁任务 https://stackoverflow.com/a/49676127/3679900
对于运行大量快速/小型任务的所有这些问题
,我们需要快速的分布式任务管理,这不需要
先前的资源分配(如 Airflow 所做的那样),因为每个 ETL 任务都需要
资源非常少,并且允许任务在执行完之后执行
其他立即。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)