【hadoop】MapReduce分佈式計算框架原理

PS:實操部分就省略了哈,準備最近好好看下理論這塊,其實我是比較懶得哈!!!java

<?>MapReduce的概述程序員

MapReduce是一種計算模型,進行大數據量的離線計算。
MapReduce實現了Map和Reduce兩個功能:
其中Map是滴數據集上的獨立元素進行指定的操做,生成鍵——值對形式中間結果。
其中Reduce則對中間結果中相同「鍵」的全部「值」進行規約(分類和概括),以獲得最終結果。

<?>如何進行並行分佈式計算?web

並行計算(如SPARK)算法

是相對於串行計算而言,通常可分爲時間並行和空間並行。時間並行能夠看作是流水線操做,相似CPU執行的流水線,而空間並行則是目前大多數研究的問題,例如一臺機器擁有多個處理器,在多個CPU上執行計算,例如MPI技術,一般可分爲數據並行和任務並行。數據庫

分佈式計算(如HADOOP)編程

是相對單機計算而言的,利用多臺機器,經過網絡鏈接和消息傳遞協調完成計算。把須要進行大量計算的工程數據分區成小塊,由多臺計算機分別計算,再上傳運算結果後,將結果統一合併得出最終結果。服務器

 

<?>如何分發待處理數據?網絡

在大規模集羣環境下,如何解決大數據的劃分、存儲、訪問管理併發


<?>如何處理分佈式計算中的錯誤?負載均衡

 * 大數據並行計算系統使用,所以,節點出錯或失效是常態,不能由於一個節點失效致使數據丟失、程序終止或系統崩潰。所以,系統須要有良好的可靠性設計和有效的失效檢測和恢復計算。
 * 設1萬個服務器節點,每一個服務器的平均無端障時間是1千天,則平均天天10個服務器出錯!


<?>MapReduce是什麼?
 * 一種編程模型:不是一門語言,是一個模型
 * 處理大數據集
 * 部署於大規模計算機集羣
 * 分佈式處理方式


MapReduce核心代碼:

 

輸入數據:
hello word bye world
hello china bye china                   通過mapreduce處理後 :hello:3,bye:3,word:2,china:2,chongqing:2
hello chongqing bye chongqing 

Map核心代碼:
Map(Key,Value){
  for(each word ‘word’ in value)
    collect(‘word’,1);
}

Reduce核心代碼:

Map(Key,Value[]){
  int count=0;
  for(each w in value)
    count++;
  collect(Key,count);
}

圖解以下:

 


MapReduce的優點:
一、經過MapReduce這個分佈式處理框架,不只能用於處理大規模數據,並且能將不少繁瑣的細節隱藏起來,好比:自動並行化、負載均衡和災備管理,這將極大地簡化程序員的開發工做
二、MapReduce的伸縮性很是好,也就是:每增長一臺服務器,就能將差很少的計算能力接入到集羣中,而過去大部分分佈式處理框架,在伸縮性方面都與MapReduce相差甚遠


MapReduce的不足:
一、不適合事務/單一請求處理
MapReduce絕對是一個離線批處理系統,對於批處理數據應用的很好,MapReduce(不管是Google的仍是Hadoop的)是用於處理不適合傳統數據庫的海量數據的理想技術,但它又不適合事務/單一請求。(Hbase使用了來自Hadoop核心的HDFS,在其經常使用操做中並無使用MapReduce)
二、不能隨即讀取
三、以蠻力代替索引
在索引是更好的存取機制時,MapReduce將劣勢盡顯
四、low-level語言和操做
「直接開始你想要的 —— 而不是展示一個算法, 解釋如何工做的。」(關係型數據庫的觀點) —— High level(DBMS) 「展現數據存取的算法」(Codasyl 的觀點)—— Low  level (MapReduce)
五、性能問題
想一想N 個map實例產生M個輸出文件,每一個最後由不一樣的reduce 實例處理,這些文件寫到運行map實例機器的本地磁盤。若是N是1000,M是500,map階段產生500,000個本地文件,當reduce階段開始,500個reduce實例每一個須要讀入1000個文件,並用相似FTP協議把它要的輸入文件從map實例運行的節點上pull取過來,假如同時有數量級爲100的reduce實例運行,那麼2個或者2個以上的reduce實例同時訪問一個map階段來獲取輸入文件是不可避免的——致使大量的硬盤查找,有效的硬盤運轉速度至少下降20%。
六、僅提供瞭如今DBMS功能的一部分
做爲用於分佈式處理的算法技術,MapReduce不是數據庫,不支持索引、數據更新、事務及完整性約束,且與多數DBMS工具不兼容。
七、不適合通常的web應用大部分的web應用,只是對數據進行簡單的訪問,每次請求處理所耗費的資源其實很是小,它的問題是高併發,因此採用負載均衡技術來分擔負載。只有當特殊狀況下,好比建索引、進行數據分析等,纔可能用MR.

相關文章
相關標籤/搜索