阅读时间: 3 分钟
语境。
什么是Airflow?
- Airflow是一个免费使用的开源工具,由Apache开发,用于管理工作流
- 是目前最流行的、最好的工作流管理系统之一,拥有强大的社区支持。
什么是DAG?
- DAG是有向无环图的意思
- 有向意味着流动是单向的
- 无环的意思是流动永远不会回到第一个节点(顶点)/起始节点(防止双向流动),这有点类似于单工通信。
- 图是一种非线性的数据结构,有两个组成部分
- 节点(顶点)。节点代表相互连接的对象,通常使用一个粗体点
- 边缘:边缘连接一个节点和另一个节点,如果没有向前的箭头,意味着流动是双向的,否则如果有一个箭头,意味着流动只有一个方向。
- 箭头所指向的节点被称为对箭头所指向的节点有依赖性。
操作符。
什么是操作符,为什么我们需要它们?
- 在实践中,DAG只代表工作流程,不会做任何计算(或执行操作)。因此,为了进行实际操作,我们需要操作符。在这种情况下,运算符是一种占位符,帮助我们定义我们想要执行的操作。
- 根据你的要求和你所使用的编程语言,Airflow中有不同种类的操作符。BashOperator , PythonOperator是最常用的。你可以访问(Github上的Airflow官方操作符目录): github repo链接,查看所有类型的操作符。即使你需要的操作符不在那里,你也很有可能在Airflow/contrib(github目录: contrib目录链接)下很快看到它,这要感谢伟大的社区支持和所有了不起的开发者。
- BaseOperator 是所有操作符的父类,也就是说,所有的操作符都将继承BaseOperator类的属性。
- 举个例子。假设你想运行一个Python函数,那么为了执行它,你需要使用PythonOperator。
操作器的分类。
- 传感器。 例如,HdfsSensor(Hadoop文件系统传感器将一直运行,直到它检测到HDFS中的文件或文件夹)。
- 操作员。 例如,PythonOperator(将帮助执行用Python编写的函数)。
- 传输。例 如,MySqlToHiveTransfer(顾名思义,它将把数据从MySQL转移到Hive)。
# sample python function
def print_function(x):
return x + " is best tool for workflow management"
# defining the DAG
dag = DAG(
'python_operator_sample',
default_args=default_args,
description='Demo on How to use the Python Operator?',
schedule_interval=timedelta(days=1),
)
#creating the task
t1 = PythonOperator(
task_id='print',
python_callable= print_function,
op_kwargs = {"x" : "Apache Airflow"},
dag=dag,
)
t1
任务。
什么是任务?
- 在Airflow中,一个操作者的实例化(分配给一个特定的名字)被称为一个任务。在Airflow中,每个操作者有一个任务,这是编写任务的标准方式。在定义任务时,你必须定义task_id 和dag 容器。比如说。
#creating the task
t1 = PythonOperator(
task_id='print',
python_callable= print_function,
op_kwargs = {"x" : "Apache Airflow"},
dag=dag,
)
什么是Dagruns?
- DagRuns可以被定义为DAG,它被安排在一定的时间间隔后运行,如每天/每分钟/每小时等。
- 我们也有execution_time,它从start_time(DAG内部)开始,根据schedule_interval(DAG内部)定义的时间间隔在一定时间后继续执行。
什么是TaskInstances?
- 在Dagruns中定义的任务被称为TaskInstances。
- 我们必须有一个与TaskInstances和Dagruns相关的状态,例如 "运行"、"失败"、"排队"、跳过等。
任务依赖性的作用是什么?
- 在设置了DAG和任务之后,我们可以继续设置依赖关系,即我们想要执行任务的顺序(基于我们拥有的DAG)。
- 假设我们希望任务t2在任务t1之后执行,那么我们将发送t2对t1的依赖关系(意味着只有在t1完成其工作之后,才会有t2运行)。有两种设置依赖关系的方法。
- 使用set_upstream / set_downstream。例如,t1.set_downstream(t2)
- 使用位移运算符(>>或<<)。例如,t1>>t2
总结。
- Airflow是Apache的一个开源的免费工作流管理工具,可能是目前最好的工具。
- 想了解更多关于这个了不起的工具吗?请访问 官方文档
更多关于Airflow和其他技术博客的内容,请访问Knoldus博客。