# Airflow Demo 一个用于学习和练习 **Apache Airflow** 的示例代码仓库。仓库通过多个独立的 DAG 示例,演示任务定义、参数配置、分支选择、任务间通信、传感器以及跨 DAG 依赖等常见用法,并包含 Hive 集成示例。 > 本仓库以学习示例为主。运行前请检查代码中使用的 Airflow Operator、Connection ID、文件路径和外部服务配置,并根据自己的环境进行调整。 ## 环境参考 当前学习环境可参考以下版本: - Python 3.6 - Apache Airflow 2.2.5 - Apache Hive 2.3.6(仅运行 Hive 示例时需要) Airflow 不同版本之间的导入路径、Provider 依赖和部分参数可能存在差异。若使用其他版本,请以当前安装版本的文档和实际报错为准。 ## 示例目录 | 文件 | 主要内容 | | --- | --- | | `hello_world.py` | 基础 DAG 与任务定义入门示例 | | `hello_world2.py` | 另一种基础工作流与任务编排示例 | | `args_example.py` | DAG 和任务的参数配置示例 | | `branch_example.py` | 使用分支任务,根据 Python 函数的返回值选择后续执行路径 | | `xcom_example.py` | 使用 XCom 在任务之间传递少量数据 | | `xcom_example2.py` | XCom 的另一种任务间数据传递场景 | | `file_sensor_example.py` | 使用 Sensor 等待文件出现或上游任务达到指定状态 | | `dag_dependency1.py` | 跨 DAG 依赖示例的一部分,建议与 `dag_dependency2.py` 配合阅读 | | `dag_dependency2.py` | 跨 DAG 依赖、触发或等待相关示例,具体行为以代码配置为准 | | `hive_provider.py` | Hive Operator / Provider 集成示例,需要配置对应的 Hive 连接和服务 | ## 如何运行 ### 1. 确认 Airflow 环境 先进入已经安装 Airflow 的 Python 虚拟环境,并确认 Airflow 可以正常执行: ```bash airflow version ``` ### 2. 克隆仓库 ```bash git clone https://gitea.kennethcheng.cc/KennethCheng/airflow_demo.git cd airflow_demo ``` ### 3. 将示例放入 DAG 目录 查看当前 Airflow 配置的 DAG 目录: ```bash airflow config get-value core dags_folder ``` 确认目录无误后,将示例 Python 文件复制到该目录。也可以根据自己的部署方式,将仓库目录配置为 Airflow 能够扫描到的 DAG 目录: ```bash DAGS_DIR="$(airflow config get-value core dags_folder)" cp ./*.py "$DAGS_DIR"/ ``` 请确保 Airflow Scheduler 对这些文件有读取权限。若使用容器或多节点部署,还需要保证相关节点能够访问相同的 DAG 文件及所需资源。 ### 4. 检查 DAG 是否加载成功 ```bash airflow dags list ``` 如果示例未出现在列表中,检查导入错误: ```bash airflow dags list-import-errors ``` 也可以打开 Airflow Web UI,查看 DAG 列表、任务依赖图、运行日志和任务状态。具体启动 Scheduler、Web Server 的方式取决于现有 Airflow 部署。 ### 5. 运行示例 在 Web UI 中找到对应 DAG 并手动触发,或使用命令行触发: ```bash airflow dags trigger ``` 将 `` 替换为代码中实际定义的 DAG ID。**DAG ID 不一定与 Python 文件名相同**;运行前请先查看对应文件中的 `dag_id` 配置。 ## 运行前需要注意 ### 跨 DAG 依赖 阅读 `dag_dependency1.py` 和 `dag_dependency2.py` 时,注意上游和下游 DAG 的 `dag_id`、调度时间、逻辑日期(Logical Date / Execution Date)以及 Sensor 的等待条件。两个 DAG 的调度方式或逻辑日期不匹配时,下游任务可能一直等待。 ### 文件传感器 运行 `file_sensor_example.py` 前,请检查代码中配置的目标文件路径。该路径必须对运行 Sensor 任务的 Airflow 执行环境可见;如果文件由其他主机或容器生成,需要确认目录挂载或共享方式正确。 ### XCom XCom 适合传递任务间需要的小型元数据或计算结果,不建议用来传输大型 DataFrame、文件内容或大批量业务数据。大型数据通常应存储在文件系统、对象存储或数据库中,再通过 XCom 传递其路径或标识。 ### Hive 集成 运行 `hive_provider.py` 前,请确认 HiveServer2 / Metastore 等所需服务已启动且网络可达,并在 Airflow 的 **Admin → Connections** 中配置连接。Connection ID、连接参数和代码中的配置必须一致;若缺少相应 Provider 包,请安装与当前 Airflow 版本兼容的依赖。 ## 建议学习顺序 1. 从 `hello_world.py`、`hello_world2.py` 熟悉 DAG 和 Operator 的基本结构。 2. 阅读 `args_example.py`,了解 DAG 与任务的参数配置。 3. 学习 `xcom_example.py`、`xcom_example2.py`,掌握任务间传递小型数据的方法。 4. 阅读 `branch_example.py`,理解分支选择与不同任务路径。 5. 练习 `file_sensor_example.py` 和两份跨 DAG 依赖示例,理解任务等待与工作流协作。 6. 最后阅读 `hive_provider.py`,尝试将 Airflow 与 Hive 环境连接起来。 ## 说明 本仓库用于个人学习和功能演示。用于生产环境前,请根据实际业务补充依赖管理、连接与敏感信息管理、任务超时、重试策略、告警、日志和数据质量校验等配置。