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


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

<?>MapReduce的概述

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

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

並行計算(如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的優勢:
1、通過MapReduce這個分布式處理框架,不僅能用於處理大規模數據,而且能將很多繁瑣的細節隱藏起來,比如:自動並行化、負載均衡和災備管理,這將極大地簡化程序員的開發工作
2、MapReduce的伸縮性非常好,也就是:每增加一台服務器,就能將差不多的計算能力接入到集群中,而過去大部分分布式處理框架,在伸縮性方面都與MapReduce相差甚遠


MapReduce的不足:
1、不適合事務/單一請求處理
MapReduce絕對是一個離線批處理系統,對於批處理數據應用的很好,MapReduce(不論是Google的還是Hadoop的)是用於處理不適合傳統數據庫的海量數據的理想技術,但它又不適合事務/單一請求。(Hbase使用了來自Hadoop核心的HDFS,在其常用操作中並沒有使用MapReduce)
2、不能隨即讀取
3、以蠻力代替索引
在索引是更好的存取機制時,MapReduce將劣勢盡顯
4、low-level語言和操作
“直接開始你想要的 —— 而不是展現一個算法, 解釋如何工作的。”(關系型數據庫的觀點) —— High level(DBMS) “展示數據存取的算法”(Codasyl 的觀點)—— Low  level (MapReduce)
5、性能問題
想想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%。
6、僅提供了現在DBMS功能的一部分
作為用於分布式處理的算法技術,MapReduce不是數據庫,不支持索引、數據更新、事務及完整性約束,且與多數DBMS工具不兼容。
7、不適合一般的web應用
大部分的web應用,只是對數據進行簡單的訪問,每次請求處理所耗費的資源其實非常小,它的問題是高並發,所以采用負載均衡技術來分擔負載。只有當特殊情況下,比如建索引、進行數據分析等,才可能用MR.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM