MapReduce架構

MapReduce特色
 易於編程(熟悉以後確實很簡單,大多數是map和reduce兩個部分。hive和pig讓mapreduce更加簡單)
 良好的擴展性(簡單的添加機器就能夠實現)
 高容錯性(job中任務部分失敗,能夠從新執行)
 適合PB級以上海量數據的離線處理
MapReduce不擅長
 實時計算
 像MySQL同樣,在毫秒級或者秒級內返回結果(能夠參考Spark或HBase,HBase隨機讀寫性能好,統計不太好)
 流式計算
 MapReduce的輸入數據集是靜態的,不能動態變化
 MapReduce自身的設計特色決定了數據源必須是靜態的(能夠考慮Storm)
 DAG計算
 多個應用程序存在依賴關係,後一個應用程序的輸入爲前一個的輸出(Tez)
   
MapReduce將做業的整個運行過程分爲兩個階段
     Map階段和Reduce階段
 Map階段由必定數量的Map Task組成
 輸入數據格式解析:InputFormat
 輸入數據處理:Mapper
 數據分組:Partitioner
 Reduce階段由必定數量的Reduce Task組成
 數據遠程拷貝
 數據按照key排序
 數據處理:Reducer
 數據輸出格式:OutputFormat編程

 默認TextInputFormat對文件切分,並處理每個Split,提供RecordReader生成key/value
    TextInputFormat:Key是行在文件中的偏移量,value是行內容若行被截斷,則讀取下一個block的前幾個字符
    設計到的概念           
           Block
        HDFS中最小的數據存儲單位默認是64MB
        Spit
        MapReduce中最小的計算單元默認與Block一一對應
        Block與Split
        Split與Block是對應關係是任意的,可由用戶控制網絡

Map階段
 InputFormat(默認TextInputFormat)
 Mapper
 Partitioner
 Sort(可選)
 Combiner(local reducer)(可選)app

Reduce階段
 Sort
 Reducer
 OutputFormat(默認TextOutputFormat)性能

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處理設計

 

相關文章
相關標籤/搜索