實用調度工具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_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專欄作者“大數據和云計算”的原創稿件,轉載請通過微信公眾號獲取聯系和授權】