一.MapReduce的應用場景
1.MapReduce特點
易于程式設計
良好的擴充性
高容錯性
适合PB級以上海量資料的離線處理
備注:*MR的最後一個特性就注定了它的應用場景的特定性,專門為處理離線批量大資料*而生。
問:那MR不擅長什麼啊?它不擅長的東西誰比較擅長呢?
2.MapReduce的特色—不擅長的方面
-
實時計算spark
像MySQL一樣,在毫秒級或者秒級内傳回結果
-
流式計算storm
MapReduce的輸入資料集是靜态的,不能動态變化
MapReduce自身的設計特點決定了資料源必須是靜态的
-
DAG計算Tez
多個應用程式存在依賴關系,後一個應用程式的輸入為前一個的輸出
PS:你的弱點就是别人的機會!
3.常見MapReduce應用場景
- 簡單的資料統計,比如網站pv、 uv統計
- 搜尋引擎建索引
- 海量資料查找
-
複雜資料分析算法實作
聚類算法
分類算法
推薦算法
圖算法
二.MapReduce程式設計模型
1.最經典的MR程式設計執行個體-WordCount
- 場景:有大量檔案,裡面存儲了單詞, 且一個單詞占一行
- 任務:如何統計每個單詞出現的次數?
-
類似應用場景:
搜尋引擎中,統計最流行的K個搜尋詞;
統計搜尋詞頻率,幫助優化搜尋詞提示
将問題範化為:有一批檔案(規模為TB級或者 PB級),如何統計這些檔案中所有單詞出現的次數? 方案:首先,分别統計每個檔案中單詞出現次數,然後累加不同檔案中同一個單詞出現次數;
典型的MapReduce過程
下面詳細介紹每一步的操作
- Input: 一系列key/value對
- 使用者提供兩個函數實作:
- map(k,v) ->list(k1,v1)【(k1,v1) 是中間key/value結果對】
- reduce(k1, list(v1)) ->v2
- Output:一系列(k2,v2)對
2.MapReduce程式設計模型
MapReduce将作業的整個運作過程分為兩個階段:Map階段和Reduce階段
- Map階段由一定數量的Map Task組成
- 輸入資料格式解析:InputFormat
- 輸入資料處理: Mapper
- 資料分組: Partitioner
- Reduce階段由一定數量的Reduce Task組成
- 資料遠端拷貝
- 資料按照key排序
- 資料處理: Reducer
- 資料輸出格式:OutputFormat
3.内部邏輯
4.外部實體結構
5.程式設計模型
【1】InputFormat
檔案分片( InputSplit)方法,可處理跨行問題,将分片資料解析成key/value對,預設實作是TextInputFormat
備注:Block和Spit的差別
Block
HDFS中最小的資料存儲機關
預設是64MB
Split
MapReduce中最小的計算單元
預設與Block**一一對應**
總之:Split與Block是對應關系是任意的,可由使用者控制
【2】Combiner
Combiner可做看local reducer,合并相同的key對應的value( wordcount例子),通常與Reducer邏輯一樣。
好處是減少Map Task輸出資料量(磁盤IO),減少Reduce-Map網絡傳輸資料量(網絡IO)。
【3】Partitioner
Partitioner決定了Map Task輸出的每條資料交給哪個Reduce Task處理。預設實作: hash(key) mod R,R是Reduce Task數目,允許使用者自定義
,很多情況需自定義Partitioner
,比如“ hash(hostname(URL)) mod R”確定相同域名的網頁交給同一個Reduce Task處理
6.程式設計模型總結
- Map階段
- InputFormat(預設
- TextInputFormat)
- Mapper
- Combiner( local reducer)
- Partitioner
- Reduce階段
- Reducer
- OutputFormat
三.MapReduce的架構
1.MapReduce 1.0(分布式計算架構)
2.MapReduce 2.0架構
Client
與MapReduce 1.0的Client類似,使用者通過Client與YARN互動,送出MapReduce作業,查詢作業運作狀态,管理作業等
MRAppMaster
- 功能類似于 1.0中的JobTracker,但不負責資源管理;
- 功能包括:任務劃分、資源申請并将之二次配置設定個MapTask和Reduce ask、任務狀态監控和容錯。
3.MapReduce 2.0運作流程
4.MapReduce 2.0容錯性
-
MRAppMaster容錯性
一旦運作失敗,由YARN的ResourceManager負責重新啟
動,最多重新開機次數可由使用者設定,預設是2次。一旦超過
最高重新開機次數,則作業運作失敗。
-
Map Task/Reduce Task
Task周期性向MRAppMaster彙報心跳;
一旦Task挂掉,則MRAppMaster将為之重新申請資源,并運作之。最多重新運作次數可由使用者設定,預設4次。
5.資料本地性
什麼是資料本地性( data locality)?
如果任務運作在它将處理的資料所在的節點,則稱該任務具有“資料本地性”
。本地性可避免跨節點或機架資料傳輸,提高運作效率,盡量同節點或者同機架。
6.推測執行機制
-
作業完成時間取決于最慢的任務完成時間
一個作業由若幹個Map任務和Reduce任務構成
因硬體老化、軟體Bug等,某些任務可能運作非常慢
-
推測執行機制
發現拖後腿的任務,比如某個任務運作速度遠慢于任務平均速度
為拖後腿任務啟動一個備份任務,同時運作
誰先運作完,則采用誰的結果
-
不能啟用推測執行機制
任務間存在嚴重的負載傾斜
特殊任務,比如任務向資料庫中寫資料
四.總結
本部落客要講述了MR的應用場景,基本架構和程式設計模型。特别需要注意的是他的應用場景相對來說比較固定,主要是基于一些離線的資料做一些統計和挖掘的工作。另外MR的工作流程非常重要,一定是非常清晰的描述出叢集的工作順序以及每個環節的核心功能是什麼,為下一篇MR程式設計實戰打好基礎。