1.概述
在Hadoop應用,隨著業務指標的迭代,而使其日趨複雜化的時候,管理Hadoop的相關應用會變成一件頭疼的事情,如:作業的依賴排程,任務的執行情況的監控,異常問題的排查等,這些問題會是的我們日常的工作變得複雜。那麼,在沒有條件和精力去開發一套排程系統的情況下,我們去選擇一款第三方開源的排程系統,來儘量減輕和降低我們日常工作的複雜度,也是極好的。今天,筆者給大家比較幾種常見的排程系統,供大家去選擇。
2.內容
2.1 Oozie
Oozie目前是託管在Apache基金會的,開源。在之前的部落格《Oozie排程》一文當中,介紹相關Oozie的排程,如何去排程Hadoop的相關,大家可以從部落格的文中所描述的內容看出,配置的過程略顯繁瑣和複雜,配置相關的排程任務比較麻煩,然其視覺化介面也不是那麼的直觀,另外,對UI介面要求較高的同學,此排程系統估計會讓你失望。若是對改排程系統感興趣的同學可以到《Oozie排程》一文中做相關細節的瞭解。這裡就不多做贅述了。
2.2 Zeus
它是一個Hadoop的作業平臺,從Hadoop任務的除錯執行到生產任務的週期排程,它支援任務的整個生命週期。從其功能來看,它支援以下任務:
- Hadoop的MapReduce任務排程執行
- Hive任務的排程執行
- Shell任務的執行
- Hive後設資料的視覺化展示查詢及資料預覽
- Hadoop任務的自動排程
其開源地址在Github上面,可在Github搜尋Zeus,即可找到相關工程。Zeus是由阿里巴巴開源出來的,文件在Github上描述的也比較詳細,其相關安裝步驟及使用方法可參考Github上的官方文件,這裡就不多做贅述了。
2.3 Azkaban
這是由LinkedIn建立的一個批處理工作流,用於跑Hadoop的Jobs。Azkaban提供了一個易於使用的使用者介面來維護和跟蹤你的工作流程。其視覺化介面如下所示:
另外,Github上貢獻的Azkaban排程系統的原始碼量不大,做二次開發難度不大。其功能點涉及以下內容:
- 相容Hadoop版本
- 易用的Web UI
- 簡單的Web和Http工作流的上傳
- 專案工作區
- 工作流排程
- 模組化和外掛化
- 認證和授權
- 使用者行為跟蹤
- 郵件告警失敗和成功
- SLA告警
- 重啟失敗的Jobs
Azkaban的設計之初主要是基於可用性的考慮。在LinkedIn執行的有些年頭了,一直驅動著它們的Hadoop和資料倉儲。
它由3個關鍵部分組成,分別是:
- 關係行資料庫(MySQL):Azkaban使用MySQL去做一些狀態的儲存。AzkabanWebServer和AzkabanExecutorServer這兩個服務都需要接入到DB庫當中。
- AzkabanWebServer:WebServer使用DB的原因如下:
- 專案管理:對專案許可權和上傳檔案的管理。
- 執行流程狀態:對正在執行的程式進行跟蹤。
- 之前的流程或Jobs:通過搜尋先前的工作和流程,去訪問它們的日誌檔案。
- 排程程式:保持預定的工作狀態。
- SLA:保持所有的SLA規則。
- AzkabanExecutorServer:另外,ExecutorServer使用DB的原因如下所示:
- 獲取專案:從資料庫中檢索專案檔案。
- 執行工作流或Jobs:檢索和更新流的資料,並執行。
- Logs:儲存作業的輸出日誌,並將其流入資料庫。
- 不同的依賴進行交流:如果一個流在不同的執行器上執行,它將從資料庫中取取狀態。
三者的關係圖,如下所示:
關於其相關配置和使用,官方給出的文件比較詳細,這裡就不多贅述了。大家可以到Github去閱讀官方給出的文件。
3.總結
關於排程系統的選擇,這裡就比較了這3種,大家可以適情況而定,另外,若是條件允許或是有精力也可以參考這些排程系統的原理,開發一套滿足自己當前業務的排程系統,也不失為一種選擇。
4.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!