init: airflow_demo 初始化示例 DAG 集合
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
from airflow import DAG
|
||||
from airflow.operators.bash import BashOperator
|
||||
from airflow.operators.dummy import DummyOperator
|
||||
# 导入 HiveOperator,用于执行 Hive SQL,目前暂时不使用
|
||||
# from airflow.providers.apache.hive.operators.hive import HiveOperator
|
||||
|
||||
# 导入外部任务传感器:等待其他 DAG 中的任务完成
|
||||
from airflow.sensors.external_task import ExternalTaskSensor
|
||||
|
||||
# 导入文件传感器:等待指定文件出现
|
||||
from airflow.sensors.filesystem import FileSensor
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
# 定义一个 DAG,即一组具有依赖关系的任务
|
||||
with DAG(
|
||||
dag_id='file_sensor_example', # DAG 的唯一标识
|
||||
schedule_interval=None, # 不设置定时调度,需要手动触发 DAG
|
||||
start_date=datetime(2024, 10, 1), # DAG 的开始日期
|
||||
catchup=False, # 不补执行过去未运行的调度任务
|
||||
tags=["demo"] # 给 DAG 添加标签,方便在 Web 页面筛选
|
||||
) as dag:
|
||||
|
||||
# 1. 开始任务
|
||||
# DummyOperator 是一个空操作任务,本身不执行实际业务逻辑。
|
||||
# 通常用于标记工作流的开始、结束,或者组织任务依赖关系。
|
||||
start = DummyOperator(
|
||||
task_id="start" # 当前任务的唯一标识
|
||||
)
|
||||
|
||||
# 2. 文件传感器
|
||||
# FileSensor 本质上也是一个 Operator。
|
||||
# 它会反复检查指定文件是否存在,满足条件后才允许下游任务执行。
|
||||
wait_for_file = FileSensor(
|
||||
task_id='wait_for_file', # 任务 ID
|
||||
filepath='/home/hadoop/app/airflow/success', # 等待出现的文件路径
|
||||
fs_conn_id='fs_default', # 文件系统连接 ID
|
||||
poke_interval=5, # 每隔 5 秒检查一次
|
||||
timeout=30, # 最多等待 30 秒
|
||||
mode='poke' # 使用 poke 模式
|
||||
# poke 模式下,传感器每次检查后继续占用 Worker 工作槽等待。
|
||||
# 超过 timeout 仍未检测到文件,则任务超时失败。
|
||||
)
|
||||
|
||||
# 3. 外部任务传感器
|
||||
# ExternalTaskSensor 用来等待另一个 DAG 中的指定任务。
|
||||
# 只有满足指定的外部任务状态条件后,当前传感器才会成功。
|
||||
wait_for_other_task = ExternalTaskSensor(
|
||||
task_id='wait_for_other_task', # 当前传感器的任务 ID
|
||||
|
||||
external_dag_id='ods', # 要等待的外部 DAG ID
|
||||
external_task_id='user_ods', # 要等待的外部任务 ID
|
||||
|
||||
# 当前 DAG 运行时,查找逻辑日期早 1 天的外部任务运行记录。
|
||||
# 例如,当前逻辑日期为 10 月 12 日,
|
||||
# 则查找逻辑日期为 10 月 11 日的 ods.user_ods。
|
||||
execution_delta=timedelta(days=1),
|
||||
|
||||
allowed_states=["success"], # 外部任务成功后,传感器才成功
|
||||
|
||||
poke_interval=5, # 每隔 5 秒检查一次外部任务状态
|
||||
timeout=3600, # 最多等待 3600 秒,也就是 1 小时
|
||||
|
||||
# 未指定 mode 时,默认通常为 poke。
|
||||
# 传感器会持续轮询外部任务状态。
|
||||
)
|
||||
|
||||
# 4. Hive 任务示例
|
||||
# HiveOperator 用于提交并执行 Hive SQL。
|
||||
# 目前整段代码被注释,因此不会创建这个任务。
|
||||
#
|
||||
# user_dwd_task = HiveOperator(
|
||||
# task_id='all_finished', # Hive 任务 ID
|
||||
# hql="""
|
||||
# insert overwrite xxx
|
||||
# select ....
|
||||
# """ # 需要执行的 Hive SQL
|
||||
# )
|
||||
|
||||
# 5. Bash 任务
|
||||
# BashOperator 用于执行 Linux Shell 命令。
|
||||
some_task = BashOperator(
|
||||
task_id='all_finished', # 当前任务的唯一标识
|
||||
# {{ ts }} 是 Airflow 模板变量,运行时会被替换为当前 DAG Run 的逻辑时间戳。
|
||||
bash_command='echo "Execution time is {{ ts }}"'
|
||||
)
|
||||
|
||||
# 6. 定义任务之间的依赖关系
|
||||
# >> 表示设置执行顺序:左侧任务成功后,右侧任务才能执行。
|
||||
#
|
||||
# 执行顺序:
|
||||
# start → wait_for_file → some_task
|
||||
#
|
||||
# 即:
|
||||
# ① 执行 start;
|
||||
# ② 等待指定文件出现;
|
||||
# ③ 文件检测成功后,执行 Bash 命令。
|
||||
start >> wait_for_file >> some_task
|
||||
|
||||
# 7. 外部任务依赖示例(当前已注释,不会生效)
|
||||
# 如果需要等待 ods DAG 中的 user_ods 任务成功,
|
||||
# 然后再执行 user_dwd_task,可以配置下面的依赖关系。
|
||||
#
|
||||
# start >> wait_for_other_task >> user_dwd_task
|
||||
#
|
||||
# 注意:
|
||||
# 当前 user_dwd_task 的定义也被注释了,因此不能直接启用上面的依赖。
|
||||
# 此外,ExternalTaskSensor 虽然已经定义,但当前没有连接到任何任务,
|
||||
# 所以它不会按照这条工作流依赖链执行。
|
||||
Reference in New Issue
Block a user