欢迎回来!在我们之前的博客中,我们深入研究了Airflow的基本原理,探索了它的目的、功能和机制。现在,让我们进一步了解Airflow的任务,并掌握如何在数据到达服务器时自动触发DAG。
尽管DAG用于构造作业并定义作业将在其中执行的上下文,但DAG实际上并不执行计算。另一方面,Airflow任务是“完成需要的工作”。任务有两种:Sensors和Operators 。Operators 任务执行一些显式操作,Sensors暂停相关任务的执行,直到满足某个条件。理论上,Operators 能够执行任何Python函数。任何过程或数据结构的状态也可以使用Sensors来确定。
Airflow Operators
执行引擎通常扮演操作员的角色。根据Operators 类型,任务由Operators创建,执行特定任务。例如,创建PythonOperator可以执行某个Python方法。常用Operators类别有:
DummyOperator
这是什么都不做的Operators,主要用于在 DAG(有向无环图)中占位,构建任务流程的结构和依赖关系。
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from datetime import datetime
default_args = {
'owner': 'airflow',
'start_date': datetime(2024, 12, 4)
}
with DAG('dummy_operator_dag', default_args=default_args, schedule_interval='@once') as dag:
start_task = DummyOperator(task_id='start_task')
end_task = DummyOperator(task_id='end_task')
start_task >> end_task
在这个 DAG 中,start_task
和end_task
只是作为占位符来展示任务的开始和结束,中间没有实际的操作内容。
PythonOperator:
作用:用于执行自定义的 Python 函数。可以将任意 Python 函数封装成一个 Airflow 任务,方便在 DAG 中进行调度。
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime
def print_hello():
print("Hello, Airflow!")
default_args = {
'owner': 'airflow',
'start_date': datetime(2024, 12, 4)
}
with DAG('python_operator_dag', default_args=default_args, schedule_interval='@once') as dag:
python_task = PythonOperator(
task_id='python_task',
python_callable=print_hello
)
在这个示例中,python_task
会在执行时调用print_hello
函数,从而在日志中打印出Hello, Airflow!
。
BashOperator:
作用:用于执行 Bash 命令。如果你的任务涉及到在命令行中运行 Bash 脚本或者命令,就可以使用这个操作符。
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime
default_args = {
'owner': 'airflow',
'start_date': datetime(2024, 12, 4)
}
with DAG('bash_operator_dag', default_args=default_args, schedule_interval='@once') as dag:
bash_task = BashOperator(
task_id='bash_task',
bash_command='echo "Running a Bash command in Airflow"'
)
这里的bash_task
会在执行时运行指定的 Bash 命令echo "Running a Bash command in Airflow"
,将相应的字符串输出到日志或者终端。
MySqlOperator(以 MySQL 为例):
作用:用于在 MySQL 数据库中执行 SQL 语句,比如创建表、插入数据、查询数据等操作。
from airflow import DAG
from airflow.providers.mysql.operators.mysql import MySqlOperator
from datetime import datetime
default_args = {
'owner': 'airflow',
'start_date': datetime(2024, 12, 4)
}
with DAG('mysql_operator_dag', default_args=default_args, schedule_interval='@once') as dag:
mysql_task = MySqlOperator(
task_id='mysql_task',
mysql_conn_id='your_mysql_conn_id', # 你的MySQL连接ID
sql="CREATE TABLE IF NOT EXISTS test_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))"
)