您的位置:首页 > 编程语言 > Python开发

Airflow:Python 工作流管理利器

2018-01-18 16:09 761 查看
Apache Airflow 是一个用于编列杂乱核算作业流和数据处理流水线的开源东西。 假如您发现自个运转的是履行时间超长的 cron 脚本使命,或者是大数据的批处理使命,Airflow 也许是能协助您处理如今窘境的神器。这篇文章将为那些想要寻觅新的东西或者说不知道有这款东西的同学了解 Airflow 编写作业线供给入门教程。Airflow 作业流规划称为有向非循环图(DAG)。这意味着,在编写作业流时,您应当思考怎样将你的使命划分为多个可独立履行的使命,然后,将这些使命合并为一个逻辑全体,将其组合成一个图,然后完成咱们的作业流成果,例如:

图的形状决议了你作业流的全体逻辑。 Airflow DAG 能够包含多个分支,您能够决议在作业流履行时要走哪些分支或者说越过哪一个分支。这就为咱们的作业创立了一个十分有弹性的规划,由于假如发作过错,每个使命能够重试屡次,乃至能够彻底中止,并经过重新发动最终一个未完成的使命来康复运转的作业流程。在规划 Airflow 操作节点时,务必要记住,它们也许被履行不止一次。 每个使命应当是 幂等的,即具有屡次运用的才能,而不会发生意想不到的结果。Airflow 术语以下是规划 Airflow 作业流程时运用的一些术语的扼要概述:Airflow DAGs是许多Tasks的组合.每个 Task 都被完成为一个 Operator当一个 DAG 发动的时分,Airflow 都将在数据库中创立一个 DagRun记载当一个使命履行的时分,实际上是创立了一个 Task 实例运转,它运转在 DagRun 的上下文中。AIRFLOW_HOME是 Airflow 寻觅 DAG 和插件的基准目录。环境预备Airflow 是运用 Python 言语编写的,这让咱们能够十分简略得在机器上装置。我这儿运用的是 Python3.5 版别的 Python,还在运用 Python2 的兄弟们,赶忙出坑吧,3 会让你对 Python 愈加痴迷的。尽管 Airflow 是支撑 Python2 版别的,如同最低能够支撑到 Python2.6,可是我墙裂引荐咱们运用 Python3.接下来,我将运用 virtualenv 来办理开发环境,并且进行后续的一系列实验。

装置 Airflow为了便利,我这儿独自创立了一个 airflow 的用户用于实验,一起运用这个用户的 home 目录 /home/airflow作为 airflow 的作业目录,假如你期望和我看到相同的作用,那么我期望是跟着我的进程一起来:

这儿仅仅进入 virtualenv 环境,接下来才是装置 airflow 的进程,截止到我写博客的时分,airflow 的最新版别是 1.8,所以我这儿就运用 1.8 的版别:(venv) $ pip install airflow==1.8.0经过一段稍长的等待时间今后,咱们的 airflow 应当是装置成功了,在装置进程咱们能够看到,airflow 依靠于许多的别的库,这个咱们后续都会渐渐道来。如今是是不是装备 airflow 的环境了。第一个需求装备的即是 AIRFLOW_HOME环境变量,这个是 airflow 作业的根底,后续的 DAG 和 Plugin 都将以此为根底翻开,由于他们都是以AIRFLOW_HOME作为根目录进行查找。依据咱们之前的描绘,咱们的 HOME 目录应当是/home/airflow,所以能够这么设置:

哈哈,到这儿咱们能够说一个最简略的装备就算是完成了,来亮点有用的吧,测验一下输入 airflow version指令看看:

假如你看到了上面通常的输出,那么阐明咱们的 airflow 是装置和装备成功的,一起,咱们运用 ls -al指令看看,应当在/home/airflow目录上能够发现以下两个文件:

翻开 airflow.cfg文件你会发现里边有许多装备项,并且大多数都是有默许值的,这个文件即是 airflow 的装备文件,在今后的详解中咱们会接触到许多需求修正的装备,如今就以默许的装备来进行实验。假如你如今就刻不容缓得想自个修正着玩玩,那么 Airflow Configure 这篇文档能够协助你了解各个装备项的意义。初始化 Airflow 数据库也许你会有点震动了,为啥要初始化数据库?是的,由于 airflow 需求保护 DAG 内部的状况,需求保留使命履行的前史信息,这些都是放在数据库里边的,也即是说咱们需求先在数据库中创立表,可是,由于运用的是 Python,咱们不需求自个运用初始的 SQL 来创立,airflow 为咱们供给了便利的指令行,只需求简略得履行:(venv) $ airflow initdb这儿值得注意的是,默许的装备运用的是 SQLite,所以初始化知道会在本地呈现一个 airflow.db的数据库文件,假如你想要运用别的数据库(例如 MySQL),都是能够的,只需求修正一下装备,咱们后续会讲到:

Airflow Web 界面Airflow 供给了多种交互方法,首要运用到的有两种,分别是:指令行 和 Web UI。Airflow 的 Web UI 是经过 Flask 编写的,要发动起来也是很简略,直接在 AIRFLOW_HOME目录运转这条指令:(venv) $ airflow webserver然后你就能够经过浏览器看到作用了,默许的拜访端口是:8080,所以翻开浏览器,拜访以下 URL:http://localhost:8080/admin,奇特的工作就这么发作了,你将看到相似这么的页面:

第一个 DAG从一开端就说了, Airflow 的两个严重功用即是 DAG 和 Plugin,可是直到如今咱们才开端解说 DAG。DAG 是离散数学中的一个概念,全称咱们称之为:有向非循环图(directed acyclic graphs)。图的概念是由节点构成的,有向的意思即是说节点之间是有方向的,转成工业术语咱们能够说节点之间有依靠联系;非循环的意思即是说节点直接的依靠联系只能是单向的,不能呈现 A 依靠于 B,B 依靠于 C,然后 C 又反过来依靠于 A 这么的循环依靠联系。那么在 Airflow 中,图的每个节点都是一个使命,能够是一条指令行(BashOperator),能够是一段 Python 脚本(PythonOperator)等等,然后这些节点依据依靠联系构成了一条流程,一个图,称为一个 DAG,每个 Dag 都是仅有的 DagId。创立一个 DAG 也是很简略得,首要需求在 AIRFLOW_HOME 目录下创立一个 dags目录,airflow 将会在这个目录下去查找 DAG,所以,这儿咱们先创立一个,创立完今后新建一个tutorial.py文件:

然后,再来看下咱们的 DAG 文件是怎样写的:

咱们能够从 Web UI 上看到这个 DAG 的依靠状况:

这就界说了几个使命节点,然后构成了一个 DAG,一起也能够发现,依靠联系是经过 set_downstream来完成的,这仅仅一种方法,在后面咱们将会看到一个愈加简洁的方法。让 DAG 跑起来为了让 DAG 能够运转,咱们需求触发 DAG 使命,这儿有几种触发的方法,可是,最天然的当属定时器了,例如,在咱们上面的使命中,能够发现设置了一个参数: schedule_interval,也即是使命触发的周期。可是,你光设置了周期是没有用的,咱们还需求有个调度器让他调度起来,所以需求运转调度器:

我这儿运用的是 LocalExecutor, Airflow 如今有三种履行器,分别是:SequentialExecutor:次序得指定 DAGLocalExecutor:运用本地进程履行 DAGCeleryExecutor:运用 Celery 履行 DAG其间第一种 SequentialExecutor能够用来在开发调试期间运用,千万不要在生成环境中运用。第二种和第三种能够用于出产也能够用于开发测验,可是,关于使命较多的,引荐运用第三种:CeleryExecutor。总结这篇文章从 Airflow 的环境装置动身,简略得介绍了一下怎样运用 Airflow,可是这篇文章的定位始终是一篇入门文章,关于 Airflow 的高档特性。希望能帮助到你,喜欢可以留言,更多东西流给你。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: