引言
前面写过一篇文章《端午搬砖:聊聊调度云服务》,主要讲云服务的。如果企业也业务上云,可以优先选用这些服务,减少工作量。
而在传统企业内部,数据集成是基础,更是每个企业里面都至少有一个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_argsdefault_args=default_args)
- # t1, t2 and t3 are examples of tasks created by instantiating operators
- t1 = BashOperator(
- task_id='print_date',
- bash_command='date',
- dagdag=dag)
- t2 = BashOperator(
- task_id='sleep',
- bash_command='sleep 5',
- retries=3,
- dagdag=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'},
- dagdag=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吧,否则还是算了吧。
【本文为51CTO专栏作者“大数据和云计算”的原创稿件,转载请通过微信公众号获取联系和授权】