高容錯分布式計算系統(tǒng),就是要讓系統(tǒng)高可用。您的問題可以理解為如何設計高可用的分布式計算系統(tǒng)。
高可用的分布式計算系統(tǒng)的設計通常需要做到:冗余,故障自動轉(zhuǎn)移,狀態(tài)同步,資源調(diào)度,系統(tǒng)自檢,故障恢復,伸縮方便等。。。
我們可以參考當下比較流行的分布式計算框架,看看別人如何設計的。例如:MapReduce,Spark,Storm等。
MapReduce:分布式離線計算框架。在運行的時候根據(jù)文件塊自動分配計算節(jié)點,和線程,在運行的過程中如果某個節(jié)點失敗,則會嘗試在別的節(jié)點去執(zhí)行。
適合數(shù)據(jù)復雜度運算 不適合算法復雜度的運算 不適合實時計算、流式計算、DAG有向圖計算 綜上,要求算法足夠簡單,數(shù)據(jù)可以足夠大!
MapReduce包含四個組成部分 Client, JobTracker, TaskTracker ,Task。
hadoop-MapReduce模型實現(xiàn)圖
Map流程:
1,Inputformat:首先將 HDFS 中的數(shù)據(jù)以 Split 方式作為 MapReduce 的輸入。Mapper:每個Mapper 將輸入(key,value)數(shù)據(jù)解析成輸出(key,value)。
2,Partition:根據(jù)key或value及reduce的數(shù)量來決定當前的這對輸出數(shù)據(jù)最終應該交由哪個reduce task處理( Partitioner接口,默認自動完成,可定制)。
3,Combine:緩存溢寫時完成,如果有很多個相同key/value對需要發(fā)送到某個reduce端去,那么需要將這些key/value值拼接到一塊,減少與partition相關(guān)的索引記錄(reducer接口,默認自動完成,可定制) 。
4,Merge:溢寫文件合并,同時再次執(zhí)行Combiner(默認自動完成)。
Map 流程
Reduce流程
1,Copy:簡單地拉取數(shù)據(jù) Merge:同map
2,Merge,文件合并
3,Reducer:每個Reducer將輸入(key,value)數(shù)據(jù)解析成輸出(key,value) 把結(jié)果放到HDFS上
Reduce流程
spark:分布式在線批量計算框架。可以實時執(zhí)行批量計算命令。依賴內(nèi)存資源。將RDD存放于內(nèi)存,方面后續(xù)計算能夠持續(xù)復用。
spark工作示意圖
Storm是實時流式計算框架。主要是無法忍受MapReduce的高延遲。Storm的核心組件有Nimbus、Supervisor、Worker、Task、Topology、Stream、Spout、Bolt、Stream grouping、Reliability。
聯(lián)系客服