实用调度工具Airflow

引言

前面写过一篇文章《端午搬砖:聊聊调度云服务》,主要讲云服务的。如果企业也业务上云,可以优先选用这些服务,减少工作量。

而在传统企业内部,数据集成是基础,更是每个企业里面都至少有一个ETL工具或者调度+业务代码实现ETL。

Kettle

说到ETL,开源比较有名的是kettle(Kettle英文是水壶的名字,你要是去美国或者欧洲出差,很多酒店是不提供热水的,你可以电话前台要一个kettle)。现在有一家叫petaho的公司专门做kettle的商业版本。

kettle是纯java工具,Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,Kettle 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转换,job 则完成整个工作流的控制。这个工具发展很久了,不过感觉很重型,又是个C/S框架的,不是很推荐。Github上看,支持的人还是比较少。

一个通用的ETL工具其实是比较难的,主要是业务逻辑通常会灵活性和复杂度比较高,通过界面能全部配置出来太理想化了。所以反而是一些简单的调度工具会适用范围比较广,业务逻辑由企业开发人员代码实现,只解决基本调度的问题。

Airflow

这里介绍一个Airflow,这个是由Airbnb公司贡献的,(Airbnb,是一个让大众出租住宿民宿的网站,提供短期出租房屋或房间的服务。最近业务也开到中国来了) 。这家公司前面还有一个基于mesos的chronos调度服务,见文章《Chronos:数据中心的任务调度器(job scheduler)》,不过现在已经停止更新了。Airflow是由airbnb的Maxime Beauchemin创建,目前是apache孵化项目,很有特点:

1

主要是由Python实现的。Job定义也是靠python,不提供xml和界面定义的方式。下面是一个pipeline的定义例子,python本身是一种比较简洁的语言,容易上手,所以经过一定的学习还是很容易掌握的。

"""
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@airflow.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)

2

使用Jinja来做模板引擎,所以支持模板,Jinja也是Python实现的,对Python真是真爱呀。

3

虽然不支持常见的UI定义Pipeline,但是还是有丰富的UI界面来帮助pipeline的维护和管理。

(1)pipeline状态

(2)任务进度

(3)依赖关系管理

(4)甘特图可让您分析任务持续时间和重叠。帮助快速找出瓶颈以及大部分时间花在特定DAG运行中的位置。

(5)过去N批次运行不同任务的持续时间。快速查找异常值,并快速了解在多个运行中在DAG中花费的时间。

(6)更有意思的是,还支持交互式查询,一些基本,简单的数据分析在工具中就可以完成,所见即所得,不用编写pipeline,等任务完成之后才知道结果。

http://airflow.incubator.apache.org/profiling.html

4

扩展性方面支持和Celery和mesos集成

5

最后再看看社区状况,人不少,281个

不过14年的项目,现在还没有毕业,时间有点长了,可能是Airbnb也并不热衷这个事情。一个好的开源软件,背后一定要看到一个商业公司来推动他的发展,否则稳定性和未来的发展可能会一定的问题。

总结建议

最后,我个人的建议是,如果你想对调度工具有很强的掌控力,且有能力维护,就考虑选择airflow吧,否则还是算了吧。

原文发布于微信公众号 - 大数据和云计算技术(jiezhu2007)

原文发表时间:2017-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏谈补锅

记录C#常用的代码片段

using Newtonsoft.Json; using Newtonsoft.Json.Linq;

892
来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2440
来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

812
来自专栏跟着阿笨一起玩NET

C#巧用Excel模版变成把Table打印出来

转载:http://blog.csdn.net/gwblue/article/details/38865525

1152
来自专栏闻道于事

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABL...

5425
来自专栏阿炬.NET

c# datetime 格式化

2836
来自专栏跟着阿笨一起玩NET

C# Stream 和 byte[] 之间的转换

591
来自专栏跟着阿笨一起玩NET

[C#]工具类—FTP上传下载

  不错的文章:http://www.cnblogs.com/greatverve/archive/2012/03/03/csharp-ftp.html

1131
来自专栏海说

Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)

Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅。 1)...

2700
来自专栏跟着阿笨一起玩NET

C# 通过HttpWebRequest在后台对WebService进行调用

http://www.cnblogs.com/macroxu-1982/archive/2009/12/23/1630415.html

2732

扫码关注云+社区