大數據(hadoop-Mapreduce原理架構)

課程目標:

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,但不負責資源管理;
    功能包括:任務劃分、資源申請並將之二次分配個Map Task和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應用場景

相關文章
相關標籤/搜索