1、前言前端
前段時間作的一塊東西,涉及到任務的拆解與依賴,因爲時間緊急,當時採用的硬編碼辦法解決,如今終於回過神來,因而設計成一個「小框架」。數據庫
2、問題描述框架
進行大數據分析,用Java調用Sqoop接口將數據導入Hadoop,而後運行一個mapreduce任務和多個Hive任務進行建表、統計、分析,最後運算結果導回數據庫。dom
3、圖解問題oop
4、需求分析單元測試
一、任務有分層測試
二、任務之間有上下層級依賴,下層任務依賴於上層任務的運算結果大數據
三、前端可配置化,用戶自行配置任務層級與依賴關係編碼
四、運行過程當中前端能夠實時查詢到運行到哪一個層級,以及已經運行的節點的運行日誌線程
五、運行過程當中只要有一個節點失敗,咱們認爲整個任務失敗,中止本次任務
六、同層級的任務並行,任務至上而下運行
5、模型
一、工做節點(WorkNode):完成某一具體任務
二、任務(WorkTask):由N個工做節點組成一個任務
三、線程組(ThreadGroup):同時執行同一層級任務
6、狀態
一、Task狀態:成功、失敗
二、WorkNode狀態:未運行、運行中、失敗、成功
7、編碼
一、常量定義
(1)、 任務狀態
(2)、 工做節點狀態
二、domain定義
(1)、 工做任務定義(任務執行狀態、分層有序節點、當前執行到的層級)
(2)、工做節點定義
三、線程組設計
(1)、線程執行器接口
(2)、線程組
四、節點行爲接口,定義工做節點所能執行的動做,用於擴展,已經實現的節點動做有三種 (Hive執行HiveWorkNodeAction、Java執行JavaWorkNodeAction、MapReduce 執 行 MapReduceWorkNodeAction)
五、 節點線程執行器實現
六、任務執行器,用於執行任務
8、單元測試
一、構建任務
運行結果:
9、後記
限於篇幅,代碼沒粘貼徹底, 後續會加入根據運行日誌,從失敗層級恢復任務(前提是全部任務都是可重入的)