Airflow

Airflow概述特性比较下载Python2.7pipsetuptoolsairflow功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导...
摘要由CSDN通过智能技术生成

1 前言

本文只是对官网的部分翻译和使用过程中的一些体验,如若有误,还请赐教

2 概述

Airflow是一个描述,执行、调度和监控工作流的平台工具。
使用Airflow定义任务的DAG作为工作流。Airflow调度根据你定义的依赖关系执行你的任务。丰富的命令行可以在DAG上进行一系列复杂的操作,丰富的UI将使工作流pipeline更加可视化,更易监控,更易维护,快速定位问题。

2.1 特性

  1. 动态的:airflow pipeline通过python代码配置,允许动态的pipeline生成,这使得airflow可以通过写python代 码动态初始化pipeline。
  2. 优雅的:airflow简洁明晰,使用jinja模板语言使你的脚本参数化。
  3. 可伸缩:可以很容易的自定义operators,executors,扩展代码库来适应你的开发环境。
  4. 可扩展:airflow有一个模块化的架构,且可以使用消息队列来扩展任意多个workers。

2.2 与OOZIE比较

  1. 优点
option OOZIE Airflow Comment
自定义 本质作为python的第三方模块,可以根据业务场景修改源码
界面交互 有非常友好的WebUI,可以查看,重跑task,Graph和Tree可以直观的展示task的依赖关系等。还有简单的数据分析如Duration,Tries,Grantt。Chart组件支持自定义数据分析的sql
日志 需要点击很多层级才能看到,且日志有丢失现象 日志更直观,基本只需点一次就能看到。不会丢失,且可以选择存储在本地,Amazon,Google cloud
权限管理 针对每个workflow 只针对WebUI,用户有5中角色,对应不同的权限。由于dag文件和业务代码放在本地,所以其权限管理依赖于linux
重启 workflow和coordinate有更新必须重启 只有airflow.cfg配置文件更新需要重启服务
触发规则 时间和数据 时间,目录,文件,hive分区,其他dag的task等,支持自定义
组织形式 workflow层级 dag和subdag
并行度 不清楚 可以通过airflow.cfg设置,默认16(同一时间最多16个task)
sla监控 只有启用开关 可以作为参数传入dag,设置task运行时长,超时会发邮件
数据交互 只负责调度,数据库由业务决定 Connection模块支持大部分主流数据库,且可以自定义hook
  1. 缺点与问题
  • 时区:虽然airflow支持配置默认时区,但WebUI的时间是UTC时间(+00:00,上海市+08:00),无法改变,会给用户造成凌乱的错觉
  • weekly scheduler:airflow的周调度只能执行周期的开始日期。想要执行周期的结束日期要用必须execution_date+timedelta(7)

3 概念

3.1核心概念

3.1.1 DAG(Directed Acyclic Graph有向无环图)

在airfow里,一个dag表示所有task的集合,这些task之间存在单向依赖关系,不能闭环,如A->B->D,C->D。否则会报错(A->B->D->A)。

3.1.2 作用域(scope)

只有作用域是全局的DAG才能百airflow识别,如下:

dag_1 = DAG('this_dag_will_be_discovered')
def my_function():
    dag_2 = DAG('but_this_dag_will_not')
my_function()

dag_1 可以被识别,dag_2不行

3.1.3 默认参数(Default Arguments)

如果DAG()里传入default_args,那么它将作用域其下所有的operators。如果你对所有operators有一些共通的设置,那么可以用default_args来传入而不用在每个operator里。

3.1.4 执行器(Operators)

用于描述DAG下的task做什么样的操作(如执行hive脚本,导入数据,监控路径)。
大多情况下一个operator执行单个task,是DAG的最小单位,具有原子性,不能喝其他的operator分享信息和资源。它们按照依赖关系依次执行。如果需要分享信息和资源,首先考虑合并operators。如果不行,可以使用XCom,它可以在operator之间分享信息和资源。
Airflow支持自定义operator,需要继承BaseOperator。

3.1.5 任务(task)

一旦operator被实例化,将被视作一个task

3.2 附加功能

Airflow除了上述的核心概念,还提供很多额外的功能,如:资源的连接限制,交叉通信,条件执行等。

3.2.1 Hooks

Hooks是一个用于连接外部平台和数据库(hive,mysql,HDFS等)的接口。所有的连接信息存储在Connection表里。大多数operator与hook是一一对应的关系。

3.2.2 Pools

有时系统可能会被多进程造成的资源短缺等原因搞垮。airflow pools用于设置task执行的并行度

3.2.3 Connections

所有外部平台和数据库的连接信息都存在Connection表里,可以在airflow web的menu-Admin-Connections里查看管理。airlfow init的时候生成了若干默认的连接信息,可以在其基础上增删改查,conn_id是主键。很多hooks都有默认的conn_id值,不需要再明确声明

3.2.4 Xcom

3.2.5 Variables

3.2.6 Branching

3.2.7 SubDAGs

我们可以将相同或相似的task聚成一个dag,作为主dag的子dag。subdagoperator必须包含一个工厂方法来返回dag对象,代表subdag将被主dag当做dag。在webUI里,subdag operator比其它operator多个"Zoom into sub DAG"按钮。目前我对subdag理解,是方便task的组织,理清task的依赖关系,类似于oozie的层级。

  • subdag的dag_id必须以父dag_id为前缀,且用逗点 . 隔开的。如dmp.dmp_agent_behavior
  • 可以通过subdagoperator将父dag的参数变量传入subdag,如start_date
  • subdag必须有schedule_interval,如果没有或者设置为@once,subdag将不做任何事情且状态置为success
  • 清除subdag的状态也将清除其包含的task的状态。(根据我的使用,清除subdag时,如果不选Downstream,则只清除subdag自己;如果选择Downstream,则清除其包含的task的状态)
  • subdag的状态标记为success时不影响其包含的task的状态
  • subdag里不要使用depends_on_past=True
  • subdag默认使用SequentialExecutor,task将顺序执行。如果用户传入LocalExecutor则可能出现问题。(根据我的使用,airflow.cfg里配置了LocalExecutor的话,subdag使用LocalExecutor没有问题。官网说可能有问题应该是指配置文件用CeleryExecutor的情况下subdag用LocalExecutor)

官网:https://airflow.apache.org/concepts.html#subdags

3.2.8 SLAs

3.2.9 Trigger Rules

默认情况下根据task的依赖关系,上游task成功执行才会触发下游task。airflow还支持更复杂的触发机制。
所有的operators都有trigger_rule变量,定义了task将在什么样的条件下被触发执行。默认值是all_success。

  • all_success: 所有父task成功 (默认值)
  • all_failed: 所有父task失败
  • all_done: 所有父task执行完成(不管成功与否)
  • one_failed: 只要有一个父task失败
  • one_success: 只要有一个父task成功
  • none_failed: 所有父task不失败(包括all_success和skipped两种)
  • dummy: 依赖只是为了在webUI上显示,随意触发

3.2.10 .airflowignore

用户可以在DAG_FOLDER(如/home/airflow/airflow/dags)下创建一个.airflowignore文件,该文件可以定义一些正则表达式。如果DAG_FOLDER下的python文件被这些正则表达式匹配到,airflow将不会读取这些python文件。例如:

project_a
tenant_[\d]

这样的话,DAG_FOLDER下诸如“project_a_dag_1.py”, “TESTING_project_a.py”, “tenant_1.py”, “project_a/dag_1.py”, and “tenant_1/dag_1.py” 这样的文件将被忽略。.airflowignore的作用域包含当前DAG_FOLDER及其子目录。

4 命令行

airflow有丰富的命令行来操作dag,启动服务,测试等。
官网链接

5 下载、安装、启动

5.1 Python2.7

如果你的系统环境比较干净,可能需要预装以下rpm包

zlib-devel,readline-devel,sqlite-devel,bzip2-devel.i686,openssl-devel.i686,gdbm-devel.i686,libdbi-devel.i686,ncurses-libs,zlib-devel.i686,mysql-devel,cyrus-sasl-devel

官网下载对应本:https://www.python.org/downloads/
tar -xzvf Python-2.7.7.tgz
cd Python-2.7.7
./configure --prefix=/usr/local/python2.7 --enable-shared -enable-unicode=ucs4 (–prefix表示安装路径)
make
make install
如果出现以下错误:
python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
执行 cd /etc/ld.so.conf.d/
echo “/usr/local/python2.7/lib” > python2.7.conf
ldconfig
这是因为python运行需要动态加载相关的库,上述命令的意思是告诉python运行需要的库所在位置.ldconfig用于在默认配置文件目录/etc/ld.so.conf.d

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Airflow汉化指的是将开源工作流编排工具Airflow的界面和相关文档进行翻译为中文。Airflow是一个由Apache基金会孵化的项目,它提供了一种可视化的方式来编排、调度和监控数据处理任务。 汉化Airflow有以下几个主要的原因和优势: 1. 提升用户体验:将Airflow界面和相关文档翻译为中文,可以提升中国用户的使用体验和学习效果。对于不熟悉英文的用户来说,使用母语进行操作可以让他们更容易理解和掌握工具的功能和特性。 2. 方便本地化部署:随着中国数据处理领域的迅速发展,越来越多的企业和组织开始采用Airflow进行工作流的管理。汉化Airflow使得本地化部署更加方便,能够更好地满足国内用户的需求。 3. 促进社区发展:开源软件的发展需要全球开发者的参与,而Airflow的汉化可以吸引更多中文用户参与到社区中来。他们可以贡献代码、提交BUG、提供反馈等,为Airflow的改进和完善做出贡献。 4. 推广和普及:随着Airflow在中国的使用越来越广泛,汉化可以更好地推广和普及这个工作流编排工具。通过本土化的努力,能够让更多用户了解和尝试使用Airflow,进而提升其影响力和社区规模。 总之,Airflow的汉化对于提升用户体验、方便本地化部署、促进社区发展和推广普及都有着重要的作用。希望越来越多的人参与到Airflow的汉化工作中来,共同推动这个开源工作流编排工具的发展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值