1:MapReduce的應用場景node
2:MapReduce編程模型算法
3:MapReduce的架構數據庫
4:常見MapReduce應用場景編程
5:總結網絡
MapReduce的定義架構
源自於Google的MapReduce論文
發表於2004年12月
Hadoop MapReduce是Google MapReduce克隆版
MapReduce特色
易於編程
良好的擴展性
高容錯性
適合PB級以上海量數據的離線處理app
MapReduce的特點—不擅長的方面框架
實時計算
像MySQL同樣,在毫秒級或者秒級內返回結果
流式計算
MapReduce的輸入數據集是靜態的,不能動態變化
MapReduce自身的設計特色決定了數據源必須是靜態的
DAG計算
多個應用程序存在依賴關係,後一個應用程序的輸入爲前一個的輸出分佈式
MapReduce的實例一Wordcount函數
場景:有大量文件,裏面存儲了單詞,且一個單詞佔一行
任務:如何統計每一個單詞出現的次數
相似應用場景
搜索引擎中,統計最流行的K個搜索詞
統計搜索詞頻率,幫助優化搜索詞提示
Case1:整個文件能夠加載到內存中
Case2:文件太大不能加載到內存中,但<word, count>能夠存放到內存中;
Case3:文件太大沒法加載到內存中,且<word, count>也不行
將問題範化爲:有一批文件(規模爲TB級或者PB級),如何統計這些文件中全部單詞出現的次數
方案:首先,分別統計每一個文件中單詞出現次數,而後累加不一樣文件中同一個單詞出現次數
典型的MapReduce過程
Input:一系列key/value對
用戶提供兩個函數實現:
map(k,v)list(k1,v1)
reduce(k1, list(v1))v2
(k1,v1) 是中間key/value結果對
Output:一系列(k2,v2)對
map(key,value): //key : document name; value: text of document for each word w in value : emit(w,1) reduce (key,value): //key : a word; value : an iterator over counts result = 0 for each count v in values : result += v emit(key,result)
MapReduce編程模型
MapReduce將做業的整個運行過程分爲兩個階段:Map階段和Reduce階段
Map階段由必定數量的Map Task組成
輸入數據格式解析:InputFormat
輸入數據處理:Mapper
數據分組:Partitioner
Reduce階段由必定數量的Reduce Task組成
數據遠程拷貝
數據按照key排序
數據處理:Reducer
數據輸出格式:OutputFormat
MapReduce編程模型一內部邏輯
MapReduce編程模型一外部物理結構
MapReduce編程模型一InputFormat
文件分片
將分片數據解析成key/value對
默認實現是TextInputFormat
TextInputFormat
key是行在文件中的偏移量,value是行內容
MapReduce編程模型一Split與Block
Block
HDFS中最小的數據存儲單位
默認是64MB或128M
Split
MapReduce中最小的計算單元
默認與Block一一對應
Block與Split
Split與Block是對應關係是任意的,可由用戶控制
MapReduce編程模型一InputFormat
MapReduce編程模型一Combiner
Combiner可作看local Reducer
合併相同的key對應的value(Wordcount例子)
一般與Reducer邏輯同樣
好處
減小Map Task輸出數據量(磁盤IO)
減小Reduce-Map網絡傳輸數據量(網絡IO)
如何正確使用
結果可疊加
SUM
MapReduce編程模型
Map階段
InputFormat(默認TextInputFormat)
Mapper
Combiner(local Reducer)
Partitioner
Reduce階段
Reducer
OutputFormat(默認TextOutputFormat)
MapReduce1.0架構
MapReduce(分佈式計算框架)
MapReduce2.0架構
Client
與MapReduce 1.0的Client相似,用戶經過Client與YARN交互,提交MapReduce做業,查詢做業運行狀態,管理做業等。
MRAppMaster
功能相似於 1.0中的JobTracker,但不負責資源管理;
功能包括:任務劃分、資源申請並將之二次分配個MapTask和Reduce Task、任務狀態監控和容錯。
MapReduce2.0運行流程
MapReduce2.0容錯性
MRAppMaster容錯性
一旦運行失敗,由YARN的ResourceManager負責從新啓動,最多重啓次數可由用戶設置,默認是2次。一旦超過最高重啓次數,則做業運行失敗。
Map Task/Reduce Task
Task週期性向MRAppMaster彙報心跳;
一旦Task掛掉,則MRAppMaster將爲之從新申請資源,並運行之。最多從新運行次數可由用戶設置,默認4次。
MapReduce計算框架一數據本地性
什麼是數據本地性( data locality)
若是任務運行在它將處理的數據所在的節點,則稱該任務具備「數據本地性」
本地性可避免跨節點或機架數據傳輸,提升運行效率
數據本地性分類
同節點(node-local)
同機架(rack-local)
其餘(off-switch)
MapReduce計算框架一推測執行機制
做業完成時間取決於最慢的任務完成時間
一個做業由若干個Map任務和Reduce任務構成
因硬件老化、軟件Bug等,某些任務可能運行很是慢
推測執行機制 就是爲了解決上面的情形
發現拖後腿的任務,好比某個任務運行速度遠慢於任務平均速度
爲拖後腿任務啓動一個備份任務,同時進行
誰先運行完,則採用誰的結果
不能啓用推測執行機制
任務間存在嚴重的負載傾斜,如一個任務處理的數據遠大於其餘
特殊任務,好比任務向數據庫中寫數據
常見MapReduce應用場景
簡單的數據統計,好比網站pv、uv統計
搜索引擎建索引
海量數據查找,在海量數據中並行查找符合某個特徵的數據
複雜數據分析算法實現,mahout基於MR實現的數據挖掘庫
聚類算法
分類算法
推薦算法
圖算法
總結
MapReduce基本原理
MapReduce編程模型
MapReduce架構
MapReduce任務調度器
MapReduce應用場景