Airflow 是一个开源的工作流管理系统,最初由 Airbnb 开发。它使用有向无环图(DAG)来定义任务之间的依赖关系,并支持多种执行器以适应不同的环境。下面我们将一步步介绍如何安装和使用 Airflow。
Airflow 的主要组件
Airflow 由以下几个关键组件构成:
- 调度器(Scheduler) :监控 DAG 并根据依赖关系调度任务。
- 网页服务器(WebServer) :提供用户界面,用于监控和管理工作流。
- 数据库(Database) :存储 DAG 和任务的状态信息。
- 执行器(Executor) :决定如何执行任务,常见的有 SequentialExecutor、LocalExecutor、CeleryExecutor 等。
安装 Airflow
要开始使用 Airflow,首先需要安装它。以下是安装步骤:
-
安装 Python:确保系统中已安装 Python 3.6 或更高版本。
-
安装 Airflow:
bash pip install apache-airflow
-
初始化 Airflow:
csharpbash airflow db init
创建第一个 DAG
创建一个简单的 DAG 来了解 Airflow 的基本用法。
-
创建 DAG 脚本 :在
~/airflow/dags
目录下创建一个名为hello.py
的文件。inipython from datetime import datetime, timedelta from airflow import DAG from airflow.operators.bash_operator import BashOperator default_args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': datetime(2023, 3, 1), 'retries': 1, 'retry_delay': timedelta(minutes=5), } dag = DAG( 'hello', default_args=default_args, schedule_interval=timedelta(days=1), ) task_1 = BashOperator( task_id='print_date', bash_command='date', dag=dag, ) task_2 = BashOperator( task_id='print_hello', bash_command='echo "Hello World!"', dag=dag, ) task_1 >> task_2
-
启动 Airflow Web 服务器和调度器:
cssbash airflow webserver -p 8080 -D airflow scheduler -D
-
访问 Airflow Web 界面 :浏览器打开
http://localhost:8080
,在界面中可以看到并触发 DAG。
常用命令
以下是一些常用的 Airflow 命令:
- 查看所有 DAG :
airflow dags list
- 查看 DAG 中的任务 :
airflow list_tasks hello
- 触发 DAG 运行 :在 Web 界面中点击触发按钮,或使用命令行
airflow trigger_dag hello
监控和管理
Airflow 提供了强大的监控和管理功能:
- 查看任务状态:在 Web 界面中点击 DAG 名称,查看任务执行状态。
- 查看日志:点击任务名称,查看详细日志。
案例:使用 Airflow 调度 Python 脚本
如果你想使用 Airflow 调度一个 Python 脚本,可以使用 PythonOperator
。以下是一个例子:
ini
python
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
def print_hello():
print("Hello World!")
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2023, 3, 1),
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG(
'hello_python',
default_args=default_args,
schedule_interval=timedelta(days=1),
)
task = PythonOperator(
task_id='print_hello',
python_callable=print_hello,
dag=dag,
)
通过这些步骤,你可以成功安装和使用 Airflow 来管理和调度工作流。