GraphScheduleEngine是一個基於DAG圖的任務流引擎,不一樣語言編寫、運行於不一樣機器上的模塊、程序,都可以經過訂閱GraphScheduleEngine的消息來啓動、運行、結束自身的任務。python
在數據挖掘、推薦引擎的離線計算等任務中,會涉及諸多的子任務,每一個子任務之間一般還存在着複雜的依賴關係,各個任務之間構成一個有向無環圖DAG,如圖一所示:git
同時基於大數據平臺和並行化處理,咱們但願儘量的有效利用計算資源將任務時間縮短,不一樣的任務能夠運行在不一樣的機器、集羣之上。然而,任務之間一般會存在着必定的依賴關係,如數據挖掘、推薦引擎等任務依賴於ETL,ETL的子任務之間也會存在複雜的依賴關係,所以串行化的任務處理方法至關低效;同時,能夠人爲的設計並行過程,如task2和task4都依賴於task0,在設計計算流程時,能夠人工去判斷哪些task能夠並行,並能夠在代碼中使這兩個任務同時運行,但因爲數據挖掘任務的靈活性,任務自己及任務之間的依賴關係隨着挖掘的須要常常性的變化,維護和開發都不容易。github
目前存在一些開源的基於圖的任務流引擎來解決這一問題,如The Makeflow Workflow System(http://ccl.cse.nd.edu/software/makeflow/),其經過編寫Makefile文件來定義本身的任務DAG圖,但Makefile文件的編寫仍是較爲複雜的且可以運行的任務不是那麼爲所欲爲。因此,乾脆搞一套本身的基於DAG圖的任務流引擎:GraphScheduleEngine。shell
GraphScheduleEngin經過消息隊列的機制,提供了任務配置、任務啓動、任務依賴分析、任務分配的方案;開發任務worker時只須要關注任務自己的計算、運行,經過訂閱MessageQueue的消息來獲取分配的任務,並在任務完成時經過MessageQueue將任務狀態發送至GraphScheduleEngine;GraphScheduleEngine在收到一個任務狀態後判斷是否開始下一輪的任務分配。具體參見源碼實現。apache
一、 運行apache-activemq做爲消息中間件,並建立消息隊列:"ReduceQueue"大數據
二、 啓動hbase做爲任務配置信息和任務運行日誌的數據倉庫spa
三、 啓動GraphScheduleEngine.net
四、 配置任務,建立一個名爲任務worker_name的消息隊列設計
五、 在任務worker中訂閱"ReduceQueue"消息,並將任務完成狀態發佈至worker_name日誌
GraphScheduleEngine是我本人爲了協調諸多Java,python,shell編寫的不一樣數據挖掘任務、進行任務調度、監測的項目。
俗話說一個好漢三個幫,況且俺仍是菜鳥,各項功能、代碼的健壯性,須要有興趣的好漢一同來完善、發展這個項目,歡迎與本人
blog: http://blog.csdn.net/zbc1090549839
進行交流討論。
項目開源地址github