實用調(diào)度工具Airflow
引言
前面寫過一篇文章《端午搬磚:聊聊調(diào)度云服務(wù)》,主要講云服務(wù)的。如果企業(yè)也業(yè)務(wù)上云,可以優(yōu)先選用這些服務(wù),減少工作量。
而在傳統(tǒng)企業(yè)內(nèi)部,數(shù)據(jù)集成是基礎(chǔ),更是每個企業(yè)里面都至少有一個ETL工具或者調(diào)度+業(yè)務(wù)代碼實現(xiàn)ETL。
Kettle
說到ETL,開源比較有名的是kettle(Kettle英文是水壺的名字,你要是去美國或者歐洲出差,很多酒店是不提供熱水的,你可以電話前臺要一個kettle)。現(xiàn)在有一家叫petaho的公司專門做kettle的商業(yè)版本。
kettle是純java工具,Kettle 是一款國外開源的 ETL 工具,純 Java 編寫,Kettle 中有兩種腳本文件,transformation 和 job,transformation 完成針對數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,job 則完成整個工作流的控制。這個工具發(fā)展很久了,不過感覺很重型,又是個C/S框架的,不是很推薦。Github上看,支持的人還是比較少。
一個通用的ETL工具其實是比較難的,主要是業(yè)務(wù)邏輯通常會靈活性和復(fù)雜度比較高,通過界面能全部配置出來太理想化了。所以反而是一些簡單的調(diào)度工具會適用范圍比較廣,業(yè)務(wù)邏輯由企業(yè)開發(fā)人員代碼實現(xiàn),只解決基本調(diào)度的問題。
Airflow
這里介紹一個Airflow,這個是由Airbnb公司貢獻的,(Airbnb,是一個讓大眾出租住宿民宿的網(wǎng)站,提供短期出租房屋或房間的服務(wù)。最近業(yè)務(wù)也開到中國來了) 。這家公司前面還有一個基于mesos的chronos調(diào)度服務(wù),見文章《Chronos:數(shù)據(jù)中心的任務(wù)調(diào)度器(job scheduler)》,不過現(xiàn)在已經(jīng)停止更新了。Airflow是由airbnb的Maxime Beauchemin創(chuàng)建,目前是apache孵化項目,很有特點:
1. 主要是由Python實現(xiàn)的。Job定義也是靠python,不提供xml和界面定義的方式。下面是一個pipeline的定義例子,python本身是一種比較簡潔的語言,容易上手,所以經(jīng)過一定的學(xué)習(xí)還是很容易掌握的。
- """
- 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實現(xiàn)的,對Python真是真愛呀。
3. 雖然不支持常見的UI定義Pipeline,但是還是有豐富的UI界面來幫助pipeline的維護和管理。
(1)pipeline狀態(tài)
(2)任務(wù)進度
(3)依賴關(guān)系管理
(4)甘特圖可讓您分析任務(wù)持續(xù)時間和重疊。幫助快速找出瓶頸以及大部分時間花在特定DAG運行中的位置。
(5)過去N批次運行不同任務(wù)的持續(xù)時間。快速查找異常值,并快速了解在多個運行中在DAG中花費的時間。
(6)更有意思的是,還支持交互式查詢,一些基本,簡單的數(shù)據(jù)分析在工具中就可以完成,所見即所得,不用編寫pipeline,等任務(wù)完成之后才知道結(jié)果。
http://airflow.incubator.apache.org/profiling.html
4. 擴展性方面支持和Celery和mesos集成
5. ***再看看社區(qū)狀況,人不少,281個
不過14年的項目,現(xiàn)在還沒有畢業(yè),時間有點長了,可能是Airbnb也并不熱衷這個事情。一個好的開源軟件,背后一定要看到一個商業(yè)公司來推動他的發(fā)展,否則穩(wěn)定性和未來的發(fā)展可能會一定的問題。
總結(jié)建議
***,我個人的建議是,如果你想對調(diào)度工具有很強的掌控力,且有能力維護,就考慮選擇airflow吧,否則還是算了吧。
【本文為51CTO專欄作者“大數(shù)據(jù)和云計算”的原創(chuàng)稿件,轉(zhuǎn)載請通過微信公眾號獲取聯(lián)系和授權(quán)】