1. 程式人生 > >MapReduce 2.0應用場景、原理與基本架構

MapReduce 2.0應用場景、原理與基本架構

         現介紹計算框架MapReduce。MapReduce一個應用場景是有大量檔案,裡面儲存了單詞, 且一個單詞佔一行 。執行任務是如何統計每個單詞出現的次數? 類似應用場景有搜尋引擎中,統計最流行的K個搜尋詞以及統計搜尋詞頻率,幫助優化搜尋詞提示 。

        MapReduce將作業的整個執行過程分為兩個階段 :Map階段和Reduce階段 

        Map階段由一定數量的Map Task組成 :
        (1)、輸入資料格式解析:InputFormat; 

        (2)、輸入資料處理:Mapper ;

        (3)、資料分組:Partitioner 。

        Reduce階段由一定數量的Reduce Task組成 :
        (1)、資料遠端拷貝 ;

        (2)、資料按照key排序; 

        (3)、資料處理:Reducer; 

        (4)、資料輸出格式:OutputFormat。 

           MapReduce的內部邏輯如上圖所示。inputformat從hdfs上讀取split進行解析,然後輸出給mapTask。map階段的輸出寫在磁碟上。Partitioner階段將不同的map結果合理的分配到相應的ReduceTask。最後,通過Outputformat將結果寫到HDFS上。

            Inputformat有很多繼承類,實現將分片資料解析成key/value對。DBInputFormat用來讀取資料庫,FileInputFormat用來讀取各種檔案形式。還有一種空檔案讀取方式EmptyInputFormat。split和block是兩個不同的概念。spilt是mapreduce中最小的計算單元。而block是HDFS儲存的最小儲存單元。其一一對應,都可以由使用者任意指定。

           上圖所示為combiner的作用,conbiner相當於一個本地的reducer操作。將相同key的map結果進行歸併。在wordcount操作中conbainer可以將同一個map輸出的相同word進行統計。Partitioner決定了Map Task輸出的每條資料 交給哪個Reduce Task處理。 預設實現是hash(key) mod R 。其中,R是Reduce Task數目,允許使用者自定義。很多情況需自定義Partitioner,比如“hash(hostname(URL)) mod R”確保相同域 名的網頁交給同一個Reduce Task處理 。

            上圖為mapreduce的排程原理之前已經講解不在贅述。 Client 與MapReduce 1.0的Client類似,使用者通過Client與YARN 互動,提交MapReduce作業,查詢作業執行狀態,管理作業等。  MRAppMaster 功能類似於 1.0中的JobTracker,但不負責資源管理。功能包括:任務劃分、資源申請並將之二次分配個Map Task和Reduce Task、任務狀態監控和容錯。 MRAppMaster有較好容錯性。一旦執行失敗,由YARN的ResourceManager負責重新啟 動,最多重啟次數可由使用者設定,預設是2次。一旦超過最高重啟次數,則作業執行失敗。Map Task/Reduce Task 週期性向MRAppMaster彙報心跳。一旦Task掛掉,則MRAppMaster將為之重新申請資源, 並執行之。最多重新執行次數可由使用者設定,預設4次。 

           在任務執行過程中,應該保證資料的本地性。當不能同節點訪問資料時,則會進行跨節點訪問,減慢執行速度,增加網路傳輸負載。甚至跨機架訪問資料延時會更嚴重。MapReduce的應用場景包括:簡單的資料統計,比如網站pv、uv統計、搜尋引擎建索引、海量資料查詢、複雜資料分析演算法實現。例如:聚類演算法 、分類演算法、推薦演算法以及圖演算法。