大數據(四) - MapReduce

jopen 8年前發布 | 14K 次閱讀 分布式/云計算/大數據

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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!