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.
