转载:https://zhuanlan.zhihu.com/p/36043468

简介

Apache-Airflow 是Airbnb开源的一款数据流程工具,目前是Apache孵化项目。以非常灵活的方式来支持数据的ETL过程,同时还支持非常多的插件来完成诸如HDFS监控、邮件通知等功能。Airflow支持单机和分布式两种模式,支持Master-Slave模式,支持Mesos等资源调度,有非常好的扩展性。被大量公司采用。

Airflow提供了一系列的python SDK,用户在该SDK的规范下,使用python定义各个ETL节点执行的工作,节点间的关系,同时定义执行计划,失败策略等,提交到Airflow平台中后,平台会根据执行计划自动执行,同时支持失败重试、失败通知等能力。

同时,Airflow还提供了一个Web UI来查看数据流程的执行和支持一部分简单操作。部分功能也可以通过命令行或者Restful API来完成。

概念

Airflow中有几个重要概念,比较典型和易理解:

  • Operators:Airflow定义的一系列算子/操作符,更直接的理解就是python class。不同的Operator类实现了具体的功能,比如:
    • BashOperator: 可以执行用户指定的一个Bash命令
    • PythonOperator:可以执行用户指定的一个python函数
    • EmailOperator:可以进行邮件发送
    • Sensor:感知器/触发器,可以定义触发条件和动作,在条件满足时执行某个动作。Airflow提供了更具体的Sensor,比如FileSensor,DatabaseSensor等
  • Tasks:Operators的具体实例,在某个Operator的基础上指定了具体的参数或内容。其实就是OO概念中的对象(Operator是类)。
  • Task Instances:一个Task的一次运行会产生一个实例
  • DAGS:有向无环图,包括一系列的tasks和tasks之间的链接关系

由此可以看出来,使用Airflow的步骤就是定义以上概念的过程:

  1. 根据实际需要,使用不同的Operator
  2. 传入具体的参数,定义一系列的Tasks
  3. 定义Tasks间的关系,形成一个DAG
  4. 调度DAG运行,每个Task会行成一个Instance
  5. 使用命令行或者Web UI进行查看和管理

安装

安装非常简单

# airflow needs a home, ~/airflow is the default,
# but you can lay foundation somewhere else if you prefer
# (optional)
export AIRFLOW_HOME=~/airflow # install from pypi using pip
pip install apache-airflow # initialize the database
airflow initdb # start the web server, default port is 8080
airflow webserver -p 8080
# start the scheduler server
airflow scheduler

不过实际使用过程中发现Airflow对Python 3的兼容性更好,因此强烈建议运行在Python 3环境下。建议使用pyenv + pyenv-virtualenv来管理多个python版本。

配置

默认情况下,airflow在用户主目录下创建一个airflow目录作为AIRFLOW_HOME并生成数据库文件和配置文件。配置文件中包括众多的配置参数,可以根据需要修改。

如果需要使用邮件功能,修改SMTP参数:

[smtp]
# If you want airflow to send emails on retries, failure, and you want to use
# the airflow.utils.email.send_email_smtp function, you have to configure an
# smtp server here
smtp_host = HOST
smtp_starttls = False
smtp_ssl = False
smtp_user = USER_NAME
smtp_password = PASSWORD
smtp_port = 25
smtp_mail_from = FROM_EMAIL

示例

以下是官方的示例,定义了一个三节点的流程。第一个节点执行Bash命令打印日期,第二个节点执行Bash命令Sleep 5秒,第三个节点使用模板方式执行Bash命令。

把该python文件拷贝到AIRFLOW_HOME/dags目录下(如果不存在,手工创建),Airflow会自动检测并更新加载。

"""
Code that goes along with the Airflow tutorial located at:
https://github.com/airbnb/airflow/blob/master/airflow/example_dags/tutorial.py
"""
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2015, 6, 1),
'email': ['airflow@example.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
# 'queue': 'bash_queue',
# 'pool': 'backfill',
# 'priority_weight': 10,
# 'end_date': datetime(2016, 1, 1),
} dag = DAG('tutorial', default_args=default_args) # t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag) t2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=3,
dag=dag) templated_command = """
{% for i in range(5) %}
echo "{{ ds }}"
echo "{{ macros.ds_add(ds, 7)}}"
echo "{{ params.my_param }}"
{% endfor %}
""" t3 = BashOperator(
task_id='templated',
bash_command=templated_command,
params={'my_param': 'Parameter I passed in'},
dag=dag) t2.set_upstream(t1)
t3.set_upstream(t1)

常见问题

时区问题

当前版本的Airflow默认使用的是UTC时区,如果要指定流程定时运行,需要减去8。 即如果希望流程在每天晚上20:00点开始执行,实际要填写的时间是12:00

定时问题

Airflow DAG的定时规则遵循cron experssion格式,同时还提供了一些“快捷方式”,比如 @hourly 可以定义每小时运行一次.

其他参数还有:

  1. start_date: 流程开始调度的时间,可以早于或者晚于当前时间
  2. end_data: 流程结束调度的时间
  3. catch_up: 如果指定的开始时间早于当前时间且catch_up设置为true,那么airflow会把过去‘遗漏’的调度执行一遍

举例:

如果今天的时间是2018-04-12 08:00, 流程的定时策略是每天上午10:00执行,那么schedule_interval='00 02 * * *' (减8小时)
如果start_date是 2018-04-01,且catch_up为true。那么在提交到平台后,Airflow会开始从2018-04-01的日期开始调度执行,执行11次到2018-04-11。
Airflow此时等待到10:00,执行2018-04-12当天的流程

Sensor问题

Airflow提供了很多现成的Sensor,比如用于监控HDFS文件的Sensor。但是由于Sensor特性基于snakebite库,而snakebite目前并不支持Python 3,因此Sensor相关的特性在Python3下暂时无法使用。

airflow 简介的更多相关文章

  1. 【原创】Airflow 简介&如何部署一个健壮的 apache-airflow 调度系统

    声明 本文摘录了很多前辈的文章,原文如下: https://www.jianshu.com/p/2ecef979c606 Airflow 简介 Airflow是一个可编程,调度和监控的工作流平台,基于 ...

  2. AirFlow简介

    1, 简介 ​ Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行.airflow提供了丰富的命令行工具用于系统管控 ...

  3. 3.Airflow使用

    1. airflow简介2. 相关概念2.1 服务进程2.1.1. web server2.1.2. scheduler2.1.3. worker2.1.4. celery flower2.2 相关概 ...

  4. 【原创】大数据基础之Airflow(1)简介、安装、使用

    airflow 1.10.0 官方:http://airflow.apache.org/ 一 简介 Airflow is a platform to programmatically author, ...

  5. 2.airflow参数简介

    比较重要的参数: 参数 默认值 说明 airflow_home /home/airflow/airflow01 airflow home,由环境变量$AIRFLOW_HOME决定 dags_folde ...

  6. Airflow 使用简介

  7. 【airflow实战系列】 基于 python 的调度和监控工作流的平台

    简介 airflow 是一个使用python语言编写的data pipeline调度和监控工作流的平台.Airflow被Airbnb内部用来创建.监控和调整数据管道.任何工作流都可以在这个使用Pyth ...

  8. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  9. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

随机推荐

  1. legend2---lamp.sh一键安装lamp环境需要爬的坑

    legend2---lamp.sh一键安装lamp环境需要爬的坑 一.总结 一句话总结: 1.要记得更改项目权限:chown -R apache:apache /data/www/default/网站 ...

  2. webpack前置知识2(JavaScript项目初始化)

    所有的JavaScript项目都是在终端输入npm init -y进行项目初始化,如果要自定义项目规则,去掉 -y 参数. vscode终端快捷键ctrl+` 初始化 运行上述命令后,项目内会新建一个 ...

  3. 2、electron进程

    electron核心我们可以分成2个部分,主进程和渲染进程. 主进程: 主进程连接着操作系统和渲染进程,可以把她看做页面和计算机沟通的桥梁. Electron 运行 package.json 的 ma ...

  4. C#接口的实现和继承实践

    1.基本概念 接口是一种契约规范,类似于抽象基类.包括方法,属性,索引器和事件作为成员,这些成员只是作为定义,并不在接口中具体实现. 接口创建时注意以下事项: 继承接口的任何非抽象类都必须实现接口的所 ...

  5. 【命令汇总】XSS payload 速查表

    日期:2019-05-15 14:06:21 作者:Bay0net 介绍:收集并且可用的一些 XSS payload,网上的速查表很多,但是测试了下很多 payload 的不可用,这里都是自己能用的 ...

  6. Selenium学习之==>WebDriver驱动对照表

    转自www.imdsx.cn 1.Chrome 对于chrome浏览器,有时候会有闪退的情况,也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对. chr ...

  7. C++笔记(7)——一些模拟题:简单模拟、查找元素、图形输出、日期处理、进制转换、字符串处理

    以下内容基本来自<算法笔记>,作者为胡凡,建议直接买书看,我这里只是摘抄部分当笔记,不完整的. 简单模拟 就是一类"题目怎么说你就怎么做"的题目.这类题目不涉及算法,只 ...

  8. es7.4.0集群部署

    其实主要是配置的变化,需要指定下master节点 cluster.name: prod-es node.name: node1 node.master: true node.data: true pa ...

  9. RocketMQ高可用集群

    集群支持: RocketMQ天生对集群的支持非常友好 单Master: 优点:除了配置简单没什么优点 缺点:不可靠,该机器重启或宕机,将导致整个服务不可用 多Master: 优点:配置简单,性能最高 ...

  10. CentOS7 内核模块管理

    1.查看所有模块:lsmod 2.查看指定模块的详细信息:modinfo 模块名 3.动态加载模块:modprobe 模块名 4.动态卸载模块:modprobe -r 模块名 5.开机自动加载模块:假 ...