实用调度工具Airflow

企业动态
在传统企业内部,数据集成是基础,更是每个企业里面都至少有一个ETL工具或者调度+业务代码实现ETL。说到ETL,开源比较有名的是kettle。

引言

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

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

Kettle

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

Kettle

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

Kettle

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

Airflow

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

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

  1. """ 
  2. Code that goes along with the Airflow tutorial located at: 
  3. https://github.com/airbnb/airflow/blob/master/airflow/example_dags/tutorial.py 
  4. """ 
  5. from airflow import DAG 
  6. from airflow.operators.bash_operator import BashOperator 
  7. from datetime import datetime, timedelta 
  8. default_args = { 
  9. 'owner': 'airflow', 
  10. 'depends_on_past': False, 
  11. 'start_date': datetime(2015, 6, 1), 
  12. 'email': ['airflow@airflow.com'], 
  13. 'email_on_failure': False, 
  14. 'email_on_retry': False, 
  15. 'retries': 1, 
  16. 'retry_delay': timedelta(minutes=5), 
  17. # 'queue': 'bash_queue', 
  18. # 'pool': 'backfill', 
  19. # 'priority_weight': 10, 
  20. # 'end_date': datetime(2016, 1, 1), 
  21. dag = DAG('tutorial', default_argsdefault_args=default_args) 
  22. # t1, t2 and t3 are examples of tasks created by instantiating operators 
  23. t1 = BashOperator
  24. task_id='print_date'
  25. bash_command='date'
  26. dagdag=dag) 
  27. t2 = BashOperator
  28. task_id='sleep'
  29. bash_command='sleep 5'
  30. retries=3
  31. dagdag=dag) 
  32. templated_command = ""
  33. {% for i in range(5) %} 
  34. echo "{{ ds }}" 
  35. echo "{{ macros.ds_add(ds, 7)}}" 
  36. echo "{{ params.my_param }}" 
  37. {% endfor %} 
  38. """ 
  39. t3 = BashOperator
  40. task_id='templated'
  41. bash_command=templated_command
  42. params={'my_param': 'Parameter I passed in'}, 
  43. dagdag=dag) 
  44. t2.set_upstream(t1) 
  45. t3.set_upstream(t1) 

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

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

(1)pipeline状态

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吧,否则还是算了吧。

【本文为51CTO专栏作者“大数据和云计算”的原创稿件,转载请通过微信公众号获取联系和授权】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2021-08-11 10:50:35

AirFlow MaxCompute阿里云

2021-05-14 11:39:58

SchedulePython工具

2021-11-29 08:48:00

K8S KubernetesAirflow

2016-05-25 10:14:04

开源数据管道 ETL

2022-05-16 08:27:20

KubernetePodLinux

2009-07-10 17:54:29

SwingUtilit

2022-09-16 11:23:59

Python框架Celery

2022-01-05 19:34:18

AirflowCeleryMYSQL

2022-01-03 23:59:15

任务调度框架

2022-02-25 09:03:49

工具Swift项目

2022-01-05 00:03:32

场景容器Airflow

2020-11-11 11:05:41

Linux工具命令

2011-01-27 16:53:13

系统清理工具BleachBitLinux

2011-01-14 13:40:24

UbuntuLinux Tips

2020-04-26 08:22:53

前端网站工具代码

2013-10-22 09:44:53

数据中心商业模式AWS

2020-08-27 13:45:24

Linux监控工具命令

2022-12-06 17:18:42

2019-03-29 09:00:31

Kubernetes开发者工具

2013-03-20 09:40:46

HTMLCSS工具
点赞
收藏

51CTO技术栈公众号