大數據——MapReduce

MapReduce適合PB級以上海量數據的離線處理MapReduce不擅長什麼

實時計算

像MySQL一樣,在毫秒級或者秒級內返回結果

流式計算

MapReduce的輸入數據集是靜態的,不能動態變化

MapReduce自身的設計特點決定了數據源必須是靜態的

DAG計算

多個應用程序存在依賴關係,後一個應用程序的輸入為前一個的輸出

MapReduce編程模型

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)

MapReduce編程模型—內部邏輯

大數據——MapReduce

MapReduce編程模型—外部物理結構

大數據——MapReduce

MapReduce 2.0架構

大數據——MapReduce

Client

與MapReduce 1.0的Client類似,用戶通過Client與YARN交互,提交MapReduce作業,查詢作業運行狀態,管理作業等。

MRAppMaster

功能類似於 1.0中的JobTracker,但不負責資源管理;

功能包括:任務劃分、資源申請並將之二次分配個Map Task和Reduce Task、任務狀態監控和容錯。

MapReduce 2.0容錯性

MRAppMaster容錯性

一旦運行失敗,由YARN的ResourceManager負責重新啟動,最多重啟次數可由用戶設置,默認是2次。一旦超過最高重啟次數,則作業運行失敗。

Map Task/Reduce Task

Task週期性向MRAppMaster彙報心跳;

一旦Task掛掉,則MRAppMaster將為之重新申請資源,並運行之。最多重新運行次數可由用戶設置,默認4次。

數據本地性

什麼是數據本地性(data locality)

如果任務運行在它將處理的數據所在的節點,則稱該任務具有“數據本地性”

本地性可避免跨節點或機架數據傳輸,提高運行效率

數據本地性分類

同節點(node-local)

同機架(rack-local)

其他(off-switch)

推測執行機制

作業完成時間取決於最慢的任務完成時間

一個作業由若干個Map任務和Reduce任務構成

因硬件老化、軟件Bug等,某些任務可能運行非常慢

推測執行機制

發現拖後腿的任務,比如某個任務運行速度遠慢於任務平均速度

為拖後腿任務啟動一個備份任務,同時運行

誰先運行完,則採用誰的結果

不能啟用推測執行機制

任務間存在嚴重的負載傾斜

特殊任務,比如任務向數據庫中寫數據

常見MapReduce應用場景

簡單的數據統計,比如網站pv、uv統計

搜索引擎建索引 (mapreduce產生的原因)

海量數據查找

複雜數據分析算法實現

聚類算法

分類算法

推薦算法

圖算法


分享到:


相關文章: