如何跳过Airflow上的任务?

时间:2018-09-05 17:54:06

标签: airflow directed-acyclic-graphs airflow-scheduler

我想了解Airflow是否支持在DAG中跳过临时执行的任务?

可以说我的DAG图如下所示: 任务1>任务2>任务3>任务4

我想从task3手动启动DAG,最好的方法是什么?

我已经读过有关“ ShortCircuitOperator”的信息,但是我正在寻找更多的临时解决方案,一旦执行被触发,该解决方案便可以应用。

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以合并SkipMixin的ShortCircuitOperator uses under the hood来跳过下游任务。

from airflow.models import BaseOperator, SkipMixin
from airflow.utils.decorators import apply_defaults


class mySkippingOperator(BaseOperator, SkipMixin)

    @apply_defaults
    def __init__(self,
                 condition,
                 *args,
                 **kwargs):
        super().__init__(*args, **kwargs)
        self.condition = condition

    def execute(self, context):

        if self.condition:
           self.log.info('Proceeding with downstream tasks...')
           return

        self.log.info('Skipping downstream tasks...')

        downstream_tasks = context['task'].get_flat_relatives(upstream=False)

        self.log.debug("Downstream task_ids %s", downstream_tasks)

        if downstream_tasks:
            self.skip(context['dag_run'], context['ti'].execution_date, downstream_tasks)

        self.log.info("Done.")

答案 1 :(得分:0)

通过Apache Airflow的构建方式,您可以编写逻辑/分支来确定要运行的任务。

您不能从两者之间的任何任务开始执行任务。。顺序完全由依赖项管理(上游/下游)定义。

但是,如果您使用的是celery运算符,则可以忽略运行中的所有依赖关系,并让气流根据需要执行任务。再说一次,这不会阻止上游任务的调度。

答案 2 :(得分:0)

马亚恩, 有一个非常肮脏但非常简单和最明显的解决方案。大约30秒但是,只有在您可以轻松地更新PROD中的代码以及临时阻止他人运行DAG的功能时,这才有可能。 只是评论要跳过的任务

'#task1>任务2>

task3> task4

一个更严肃的解决方案,但需要更多努力,可能是基于start_from_task参数动态创建DAG,在这种情况下,将使用此参数来构建依赖项。可以使用Admin ==> Variables菜单在UI中更改参数。您可能还可以使用前一个变量的导出时间的另一个变量。例如-DAG将忽略task1和task2直到14:05:30,然后将运行整个DAG。

答案 3 :(得分:0)

是的,您只需单击任务3。切换运行按钮右侧的复选框以忽略依赖关系,然后单击运行。

enter image description here