最近遇到了很多正在研究ETL及其工具的同學向我們抱怨:同樣都在用 Kettle ,起點明明沒差異,但為什麼別人ETL做的那麼快那麼好,自己卻不斷掉坑?
其實,類似於像 Kettle 這樣開源的工具,已經覆蓋了大部分日常工作所需的功能了,直接部署一套就能夠解決企業基本的需求。但在實際使用的過程中我們也會發現,kettle 如同是一個出場自帶電話簡訊功能的智慧手機,少了功能各異的智慧 App 的配合,和只能接打電話的老年機也沒什麼不同。
今天我們就先對其中一個比較火熱的“App”——排程工具,做一個簡單的評測對比,幫助大家快速解鎖用開源工具做 ETL 的新姿勢。
一、為什麼需要排程系統?開局我們先掃盲。
我們都知道大資料的計算、分析和處理,一般由多個任務單元組成(Hive、Sparksql、Spark、Shell等),每個任務單元完成特定的資料處理邏輯。
多個任務單元之間往往有著強依賴關係,上游任務執行併成功,下游任務才可以執行。比如上游任務結束後拿到 A 結果,下游任務需結合 A 結果才能產出 B 結果,因此下游任務的開始一定是在上游任務成功執行拿到結果之後才可以開始。
而為了保證資料處理結果的準確性,就必須要求這些任務按照上下游依賴關係有序、高效的執行。一個較為基礎的處理方式是,預估出每個任務處理所需時間,根據先後順序,計算出每個任務的執行的起止時間,通過定時跑任務的方式,讓整個系統保持穩定的執行。
一個完整的資料分析任務最少執行一次,在資料量較少,依賴關係較為簡單的低頻資料處理過程中,這種排程方式完全可以滿足需求。然而在企業級場景中,更多的是需要每天執行,如果任務數量較多,在任務啟動的時間計算上就將耗費大量時間,另外如果出現上游任務執行時長超出原定預計時間或者執行異常的問題,上述的處理方式將完全無法應對,也會對人力物力造成重複損耗,因此,對於企業資料開發過程來說,一個完整且高效的工作流排程系統將起到至關重要的作用。
二、排程系統工具對比很多同學上手 ETL 工作之後,最先接觸到的應該是 linux 自帶的定期執行程式的命令 Crontab,使用簡單,執行穩定,當安裝完成作業系統之後,預設便會啟動此命令。上手容易但是也有自己的缺點,比如當任務變多之後無法管理、crontab 在機器上,無法備份,掛機就沒。因此我們在這裡對 crontab不做過多介紹,主要針對較為成熟的工作流排程工具:Apache Oozie、Azkaban、數棲雲進行橫評。
1、Oozie
Oozie:訓象人(排程mapreduce)。一個基於工作流引擎的開源框架,Oozie需要部署到java servlet中執行,主要用於定時排程,多工之間按照執行的邏輯順序排程。
它有如下功能特點:
統一排程hadoop系統常見的mr任務啟動,hdfs操作,shell排程,hive操作等;讓複雜的依賴關係,時間觸發,事件觸發使用xml語言進行表達,開發效率增高(這個不一定,個人很討厭xml,我覺得效率不高...);一組任務使用一個DAG表示,使用圖形表達,流程清晰;支援多種任務排程,能完成大部分的hadoop任務;程式定義支援EL常量和函式,表達豐富;Oozie規定在完成工作後傳送電子郵件通知;Azkaban使用Web操作。Oozie支援Web,RestApi,Java API操作;2、Azkaban
Azkaban是由Linkedin開源的一個批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作和流程。Azkaban定義了一種KV檔案格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤你的工作流。
它有如下功能特點:
相容任何版本的hadoop;易於使用的web介面;簡單工作流的上傳;方便配置任務之間的依賴關係;排程工作流;模組化和可插拔的外掛機制;認證/授權;能夠殺死並重新啟動工作流;失敗和成功的電子郵件提醒;3、數棲雲
數棲雲排程功能如下:
完成20多種資料來源的適配排程:Mysql、Oracle、Hive、HBase、Redis、MongoDB、ODPS、Postgresql、ElasticSearch、API等;模組化和可插拔的外掛機制;支援視覺化工作流配置;支援任務告警:郵件,電話,簡訊;排程型別多樣化:正常排程,空跑,暫停排程;支援任務優先順序配置;排程週期配置簡單:進行滑鼠點選即可;支援工作流與工作流之間組裝;支援工作流測試執行;在工作流檢視介面中就可以完成:檢視程式碼,執行日誌,重跑,置成功並重跑下游,重跑下游等操作;出錯任務快速定位;
(Oozie、Azkaban、數棲雲功能對比)
三、一波總結
Apache Oozie 是一個重量級的任務排程系統,功能全面,但是部署及配置會比較麻煩,從 crontab 到 Oozie 上手會有一定難度。Azkaban 是介於 Oozie 和 Crontab 之間的工具,但是安全性上不如 Oozie,同時如果出現失敗情況,Azkaban會丟失所有的工作流,Oozie則可以繼續執行。數棲雲相較於以上兩種工具而言,解決了配置及部署複雜的問題,易於擴充套件的同時,也在工作流中有了更多方便開發及運維的其他功能。
當然數棲雲不僅僅是一個功能全面的工作流排程工具,作為一個一站式大資料平臺,它同時涵蓋以下功能,無論是簡單的 ETL 工作,還是複雜的資料中臺構建工作,使用數棲雲都可以完成。基礎版永久免費!無論遇到什麼問題都能找客服解決,比開源產品體驗好 100 倍的工具,確定不來試試看嘛?