Airflow 如何在Apache Dag中添加手动任务

Airflow 如何在Apache Dag中添加手动任务,airflow,Airflow,我正在使用Apache Airflow来管理数据处理管道。在流水线的中间,一些数据需要在下一步处理之前进行检查。例如 ... -> 任务1->人员审核->任务2->。。。 其中task1和task2是数据处理任务。task1完成后,task1生成的数据需要人工审核。审核人批准数据后,可以启动task2。 人工审查任务可能需要很长时间(例如,几周) 我正在考虑使用一个外部数据库来存储人工审查结果。并使用a按时间间隔戳出审查结果。但在审查完成之前,它将占用一名空气流通工人的时间 有什么主意吗?我

我正在使用Apache Airflow来管理数据处理管道。在流水线的中间,一些数据需要在下一步处理之前进行检查。例如

... -> 任务1->人员审核->任务2->。。。
其中task1和task2是数据处理任务。task1完成后,task1生成的数据需要人工审核。审核人批准数据后,可以启动task2。 人工审查任务可能需要很长时间(例如,几周)

我正在考虑使用一个外部数据库来存储人工审查结果。并使用a按时间间隔戳出审查结果。但在审查完成之前,它将占用一名空气流通工人的时间


有什么主意吗?

我觉得你的主意不错。您可以创建一个专用DAG,用传感器检查审批流程的进度。如果您在传感器上使用了较低的超时时间,并且在此DAG上使用了适当的时间表,例如每6小时一次。调整它以适应这些任务被批准的频率以及您需要多长时间执行下游任务。

一位同事建议设置一个总是失败的任务,因此手动步骤只是将其标记为成功。我是这样实施的:

def always_fail():
引发AirflowException('请将此步骤更改为成功以继续')
手动签名=蟒蛇操作员(
任务\u id='manual\u sign\u off',
dag=dag,
python\u callable=始终\u失败
)
开始>>手动签名>>结束

在1.10之前,我使用操作员的重试功能来执行
手动签出任务。操作员已设置重试和重试延迟。因此,任务将在失败后重新安排。计划任务时,它将检查数据库以查看是否完成了签核:
如果尚未完成签核,则任务失败,释放工作人员并等待下一个计划。
如果签核已完成,则任务成功,dag运行继续

在1.10之后,引入了一个新的TI状态
UP\u,用于重新调度
,传感器本机支持长时间运行的任务

和的Piggy packing off,下面是一个完整的工作示例,用户有两周的时间在永久失败之前查看第一个任务的结果:

从日期时间导入时间增量
从airflow.models导入DAG
从气流导入气流异常
从afflow.operators.python_operator导入PythonOperator
从我的任务导入第一个任务可调用,第二个任务可调用
超时=时间增量(天数=14)
def任务_至_失败():
引发AirflowException(“请将此步骤更改为成功以继续”)
dag=dag(dag\u id=“my\u dag”)
第一个任务=PythonOperator(
dag=dag,
task\u id=“第一个任务”,
python可调用=第一个任务可调用
)
手动签名=蟒蛇操作员(
dag=dag,
任务\u id=“手动\u注销”,
python\u callable=task\u to\u fail,
重试次数=1,
最大重试延迟=超时
)
第二个任务=蟒蛇操作员(
dag=dag,
task\u id=“第二个任务”,
python可调用=第二个任务可调用
)
第一项任务>>手动签核>>第二项任务

为什么要使用
max\u retry\u delay
而不是
retry\u delay
<代码>重试\u延迟
在这种情况下似乎更合适。