開源數據流處理

  隨着公司規模增長,他們的工作流更加複雜,包含更多子處理過程以及帶有複雜的依賴關係,這將導致更多監控、問題以及運維工作。如果沒有一個清晰的數據血緣關係,可能會引起引用鏈問題和操作元數據丟失。這就是爲什麼DAGs、數據流和工作流管理器等產生的原因。

  複雜的工作流可以通過DAGs來展現。DAGs就是信息沿着指定的方向在不通節點之間傳遞的一張圖,但信息在圖中流傳不會回到原點。構建DAGs過程的就是數據流,或從一個進程作爲輸入並輸出作爲下一個進程輸入的序列化進程。

  構建這些管道流式複雜的。幸運的是,目前存在幾款開源的流管理器來輔助處理這些問題,並允許開發者將注意力聚焦在單獨的任務和任務依賴上來。爲了幫助需求者從許多工作流管理器中選擇合適的,下面我們進行了一些相關的討論。

Luigi

  Luigi是Spotify與2011開發的一個Python包,主要是用來構建–像產生推薦和排行榜任務–這樣的需要多任務複雜管道。目前組件的主要使用者,包括 Foursquare, Stripe, the Wall Street Journal, Groupon,以及其他主要商業公司。它內嵌Hadoop支持,但不像其他類似產品OOZIE和Azkaban,它們都是爲了支持Hadoop而開發的,Luigi的理念就是能夠使任務事情儘可能普適性。Luigi可以擴展到其他類型的任務,如Hive查詢,使用Scala或Python開發的SparkJob等等。它是面向編碼控制的,而不是基於GUI或聲明式的,能夠完美兼容Python中的所有包(包括依賴路徑)。Luigi的界面支持搜索、過濾或監控每個任務的狀態信息。用戶也可以查看工作流的依賴是否完成,或還沒有運行等狀態。

特性:

  • 允許有需要的任務並行運行
  • 通用任務模版的工具箱
  • 支持在Hadoop\Hive\Pig等的基於Python的MR任務
  • 嵌入針對Hadoop分佈式文件系統和本地文件系統的抽象文件系統,這樣能夠保證所有系統的原子性,防止任務崩困時數據缺失

Azkaban

  Azkaban是另外一款開源工作流管理器,它是由LinkedIn給Hadoop的實時批處理而開發的。不像Luigi,它是基於Java、調度是通過WEB瀏覽器來完成的。它主要包括AzkabanWebServer–主要作爲UI界面和處理工程管理、授權、調度和監控,MySQL數據庫作爲元數據存儲,以及AzkabanExecutorServer(以前WEB服務和executor服務器是合併在一起,但隨着Azkaban的發展,它分裂爲兩部分來幫助用戶滾動更新信息)。當前最新爲Azkaban3.0版本,包括三個模式:單服務器的使用模式,兩服務器的生產環境,以及分佈式多執行節點模式。Azkaban設計之初就將易用性作爲首要目標。例如,它包括非常易用、極其優秀展示操作功能的UI界面。

特點:

  • 兼容任何Hadoop版本
  • 簡單的WEB界面和Http工作任務上傳
  • 每個Hadoop生態的模塊與插件
  • 用戶行爲、認證和授權追蹤
  • 提供每個工程的獨立工作空間
  • 提供SLAs、任務失敗和成功的郵件提醒
  • 運行用戶重啓失敗任務

Oozie

  跟Azkaban一樣,OOZIE也是一款Java開發、基於Hadoop系統的開源工作流調度系統。然後不同於Azkaban的易用性,OOZIE更偏向於靈活性和創建複雜工作流。然而,Azkaban只能通過WEB提供基於時間的調度系統。OOZIE的Coordinator提供基於通過時間、時間或在數據不可預測情境下數據有效性的觸發器,並運行用戶通過命令行、Java API,以及基於WEB瀏覽器的GUI界面。OOZIE同樣支持基於XML屬性文件配置,而Azkaban是基於Java的。最後,Azkaban將所有的工作流運行數據保存在內存中,而OOZIE使用SQL數據庫保存,內存只用來保存狀態事務。

  OOZIE工作流是通過DAGs來優化運行的,分爲三種節點:控制節點、關聯節點和動作節點。控制節點定義了任務何時啓動與停止、流向決策、任務分支等功能,關聯節點依賴執行路徑,動作節點觸發任務運行。每個任務提供一個唯一的URL,任務結束時會響應該URL。如果URL沒有被通知,OOZIE會判斷任務是否已經完成。

特點:

  • 提供多種支持,包括MapReduce,Pig,Hive,Sqoop,和Distcp,以及系統特殊任務
  • 可伸縮、可靠、可擴展
  • 唯一標記工作任務,能夠配置爲併發運行
  • 允許用戶對任務的KILL、Suspend,或Resume
  • 高可用
  • 多任務和協調者[coordinator]能夠通過OOZIE Bundle打包和管理

Airflow

  Airflow是Airbnb與2015年開發的工具,主要用來編輯、調度DAGs及監控工作流。它主要面向編程環境的基於編輯的工具,這方面與Luigi類似。它是基於Python的DAGs工作流編碼的工具,能夠保證儘量協調性與易於維護、版本控制與測試。它的主要架構包括源碼控制的任務定義、命令行接口–用戶可以測試、運行和描述DAGs的部分環節、查看依賴/進度/元數據和日誌的WEB應用、元數據倉儲、運行分佈式任務實例的工作節點、調度進程–觸發任務運行。

特點:

  • 豐富的CLI和UI接口:允許用戶查看依賴、進度、日誌、相關代碼
  • 模塊化、可伸縮、高可擴展
  • 參數化腳本:內嵌Jinja模版引擎
  • 提供分析:基於搜索排序和session連接信息來追蹤用戶的點擊流和時間花費
  • 能夠與Hive、Presto、MySQL、HDFS、Postres或S3交互

翻譯文章

Open Source Data Pipeline – Luigi vs Azkaban vs Oozie vs Airflow

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章