Sensors - 是某种类型的运算符,它将一直运行,直到满足某个条件,但它们会占用一个完整的工作槽。如果人们能够可靠地使用更有效的方法来实现这一点,那就很好奇。
我心中的一些想法
其他相关链接:
答案 0 :(得分:2)
我认为你需要退后一步,质疑传感器消耗完整工作槽的问题。
Airflow是一个调度程序,而不是资源分配器。使用工作者并发,池和队列,您可以限制资源使用,但只是非常粗略。最后,Airflow天真地假设传感器将在工作节点上使用与BashOperator相同的资源,从而产生多进程基因组测序实用程序。但传感器价格便宜,99.9%的时间都处于睡眠状态,因此这是一个不好的假设。
因此,如果您想解决消耗所有工作槽的传感器问题,那么只需要提高工作者的并发性。您应该能够在一个工作器上同时运行数百个传感器。
如果您的群集节点和节点上的工作负载分布非常不均匀,并且系统负载非常高,则可以使用以下任一方法限制昂贵的作业数量:
airflow worker --queues my_expensive_queue
)并且具有低并发设置。这会创建每个节点的限制。如果您的要求比这更复杂,那么考虑将所有非平凡的计算作业运送到专用资源分配器,例如: Apache Mesos,您可以在其中指定确切的CPU,内存和其他要求,以确保您的群集负载在每个节点上的分布比Airflow能够更高效。
答案 1 :(得分:1)
Airflow的新版本1.10.2为传感器提供了新选项,我认为这可以解决您的问题:
模式(str)–传感器的工作方式。选项包括:{戳|重新安排},默认为戳。设置为戳戳时,传感器将在整个执行时间内占用一个工作槽,并在两次戳戳之间休眠。如果传感器的预期运行时间很短或需要短的戳间隔,请使用此模式。设置为重新计划后,传感器任务将在尚未满足条件时释放工作人员位置,并在以后的时间进行重新计划。如果达到标准的预期时间已到,请使用此模式。戳间隔应超过一分钟,以防止调度程序上负载过多。
这里是文档的link。
答案 2 :(得分:0)
跨 DAG 依赖是可行的 doc
可以在单独的 DAG 中将条件指定为单独的任务,以便在给定日期满足该条件时,允许子任务运行。