阿帕奇气流操作人员和任务

166 阅读4分钟

阅读时间: 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_iddag 容器。比如说。
#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博客

Scala FutureScala Future

分享Knol。

相关信息