众所周知,大数据领域内有数不清的组件。大数据领域中的组件甚至多到有人做了个小游戏,提问某串英文单词是宝可梦还是大数据领域里的组件。

java 提交argo workflow java airflow_大数据


java 提交argo workflow java airflow_hadoop_02

但组件多没关系,其实更重要的是看这个组件所扮演了什么角色。例如 IDEA 和 eclipse 都是 Java 的 IDE,掌握其一即可对 IDE 有一定了解了。

java 提交argo workflow java airflow_大数据_03

从上图我们能看到 Oozie 是作业流调度的系统,但是本文要讲述的 Airflow 是比 Oozie 社区更火的调度系统。

java 提交argo workflow java airflow_big data_04

java 提交argo workflow java airflow_任务调度_05

本系列文章总共有三篇,此为第一篇,目前规划如下:

  • 入门到入土 一:初识任务调度与 Airflow
  1. 什么是 Airflow?
  2. Airflow 能干什么?
  • 入门到入土 二:概念、组件与使用
  1. Airflow 有哪些概念?
  2. Airflow 有哪些组件?
  3. 如何在 docker 中部署 airflow?
  • 入门到入土 三:升级、插件与监控
  1. 关于版本:Airflow v1.x vs v2.x
  2. 更丰富和功能:Airflow 插件,如何开发插件?
  3. 监控:如何使用 statsD 监控 Airflow 的运行状况?

AIrflow 是什么?

Airflow 是大数据领域中一款用 Python 开发的任务调度工具,用于 data pipeline 的调度和监控。

划重点:

  1. AIrflow 是用 Python 开发的,这意味着 Airflow 的运行效率可能不会很高,但代码更易懂且开发速度快。
  2. AIrflow 是一个任务调度工具,用于对 data pipline 进行调度和监控,这意味这不是一个用来存储或者计算的大数据组件。

Airflow 能干什么?

作为一个任务调度工具,Airflow 当然是用来做任务调度的。
那什么是任务调度呢?

我们以洗衣服为例,简单科普下任务调度的概念。

洗衣服有什么流程?

  1. 拿衣服
  2. 洗衣服
  3. 晾衣服

其实这三个流程就是数据仓库里常见的ETL,也即 Extract(数据抽取,就是线上数据库抽取到数据仓库中), Transform(数据转换,即将数据通过一定的流程处理一遍) 和 Load(数据加载,也就是将清洗后的数据再次加载到数据库中)

我们将洗衣服这个流程抽象下,可以画出一个这样的图:

java 提交argo workflow java airflow_hadoop_06

洗衣服的流程是相对固定的,而且每天要洗,我开始想着如何偷懒。
于是,作为懒狗,我决定每天厚着脸皮让室友A下楼顺便帮我拿我的脏衣服丢进洗衣机,又下血本,用五毛钱的辣条收买了室友B,让他帮我晾衣服。

于是这个流程变成了:

java 提交argo workflow java airflow_数据库_07

经过这样一番绝妙的布局,洗衣服这件事情对我来就非常轻松了。
我所需要做的,只有三件事情:

  • 选择合适的时机求室友A去拿衣服
  • 开动洗衣机(根据衣服脏的程度,设置合理的清洗时间)
  • 选择合适的时机求室友B去晾衣服(衣服洗完了才能让室友B去拿)

这个阶段可以看做是为 E 和 L 过程编写了脚本,定时执行数据提取和数据载入的操作。

这个时候的我,只需要在合适的时机调度室友 A和室友 B,并简单操作下洗衣机,就能完成洗衣服的流程。

但是,这个流程,也可能会有一些情况需要处理。
例如当室友A在王者上分的时候,得等他打完了再喊他。(合理计划任务的执行时间)
例如洗衣机洗到一半停电了,那么就算时间到了也不需要叫室友B帮我晾衣服了。
(监控任务的执行转态,并根据任务的执行循序去执行,前面的任务完成了再去做后面的任务)

而 Airflow 就相当于这个阶段的我。

官方文档中是这样介绍的:Airflow 是一个以编程方式编写、计划和监视工作流的平台。

就像这个时候的我,想办法如何指示室友拿衣服晾衣服,计划室友什么时候有空,指使他们去哪拿什么衣服,以及看室友是不是好好在执行这个任务。

Airflow 则会定时启动 Extract 脚本,将线上数据库中的数据搬到数据库中,定时启动 Spark 程序进行数据处理和数据建模,然后在将得到的数据导入到某个数据库中。