大數據(四) - MapReduce
MapReduce適合PB級以上海量數據的離線處理</span> MapReduce不擅長什么 實時計算
像MySQL一樣,在毫秒級或者秒級內返回結果
流式計算
MapReduce的輸入數據集是靜態的,不能動態變化
MapReduce自身的設計特點決定了數據源必須是靜態的
DAG計算
多個應用程序存在依賴關系,后一個應用程序的輸入為前一個的輸出
MapReduce編程模型</span> MapReduce將作業job的整個運行過程分為兩個階段:Map階段和Reduce階段
Map階段由一定數量的 Map Task組成
輸入數據格式解析: InputFormat
輸入數據處理: Mapper
數據分組: Partitioner
Reduce階段由一定數量的 Reduce Task組成
數據遠程拷貝
數據按照key排序
數據處理: Reducer
數據輸出格式: OutputFormat
InputFormat
文件分片(InputSplit)方法
處理跨行問題
將分片數據解析成key/value對
默認實現是TextInputFormat
TextInputFormat
Key是行在文件中的偏移量,value是行內容
若行被截斷,則讀取下一個block的前幾個字符
Split與Block
Block
HDFS中最小的數據存儲單位
默認是64MB
Spit
MapReduce中最小的計算單元
默認與Block一一對應
Block與Split
Split與Block是對應關系是任意的,可由用戶控制
Combiner
Combiner可做看local reducer
合并相同的key對應的value(wordcount例子)
通常與Reducer邏輯一樣
好處
減少Map Task輸出數據量(磁盤IO)
減少Reduce-Map網絡傳輸數據量(網絡IO)
如何正確使用
結果可疊加
Sum(YES!),Average(NO!)
Partitioner
Partitioner決定了Map Task輸出的每條數據交給哪個Reduce Task處理
默認實現:hash(key) mod R
R是Reduce Task數目
允許用戶自定義
很多情況需自定義Partitioner
比如“hash(hostname(URL)) mod R”確保相同域名的網頁交給同一個Reduce Task處理
Map和Reduce兩階段 Map階段
InputFormat(默認TextInputFormat)
Mapper
Combiner(local reducer)
Partitioner
Reduce階段
Reducer
OutputFormat(默認TextOutputFormat)
</div>
MapReduce編程模型—內部邏輯</span>
MapReduce編程模型—外部物理結構</span>
MapReduce 2.0架構</span>
Client
與MapReduce 1.0的Client類似,用戶通過Client與YARN交互,提交MapReduce作業,查詢作業運行狀態,管理作業等。
MRAppMaster
功能類似于 1.0中的JobTracker,但不負責資源管理;
功能包括:任務劃分、資源申請并將之二次分配個Map Task和Reduce Task、任務狀態監控和容錯。
MapReduce 2.0容錯性</span> MRAppMaster容錯性
一旦運行失敗,由YARN的ResourceManager負責重新啟動,最多重啟次數可由用戶設置,默認是2次。一旦超過最高重啟次數,則作業運行失敗。
Map Task/Reduce Task
Task周期性向MRAppMaster匯報心跳;
一旦Task掛掉,則MRAppMaster將為之重新申請資源,并運行之。最多重新運行次數可由用戶設置,默認4次。
數據本地性</span> 什么是數據本地性(data locality)
如果任務運行在它將處理的數據所在的節點,則稱該任務具有“數據本地性”
本地性可避免跨節點或機架數據傳輸,提高運行效率
數據本地性分類
同節點(node-local)
同機架(rack-local)
其他(off-switch)
推測執行機制</span> 作業完成時間取決于最慢的任務完成時間
一個作業由若干個Map任務和Reduce任務構成
因硬件老化、軟件Bug等,某些任務可能運行非常慢
推測執行機制
發現拖后腿的任務,比如某個任務運行速度遠慢于任務平均速度
為拖后腿任務啟動一個備份任務,同時運行
誰先運行完,則采用誰的結果
不能啟用推測執行機制
任務間存在嚴重的負載傾斜
特殊任務,比如任務向數據庫中寫數據
常見MapReduce應用場景
簡單的數據統計,比如網站pv、uv統計
搜索引擎建索引 (mapreduce產生的原因)
海量數據查找
復雜數據分析算法實現
聚類算法
分類算法
推薦算法
圖算法
</div>
來自: http://blog.csdn.net//matthewei6/article/details/50526002
本文由用戶
jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!