1. 程式人生 > >MapReduce架構與執行流程

MapReduce架構與執行流程

nbsp 服務 處理 流程 三元 很大的 pre 二次排序 批量

一、MapReduce是用於解決什麽問題的?

每一種技術的出現都是用來解決實際問題的,否則必將是曇花一現,那麽MapReduce是用來解決什麽實際的業務呢?

首先來看一下MapReduce官方定義:

技術分享

總結一句話:MapReduce就是批量處理海量數據的分布式計算框架。

在數據規模比較小時,如果要批量處理一些數據,通常都是在淩晨跑一個或者多個定時任務,定時任務直接連接業務庫,從業務庫中讀取然後批量處理,但是當業務規模逐漸大了之後,像淩晨跑定時任務的方式已不足以支撐業務開展,這時分布式計算誕生了,分布式計算將一個很大的任務切分成很小的子任務,然後將子任務分發到集群上的節點上去執行,執行完之後在合並結果並對外提供服務,MapReduce就是用來解決這種業務場景的。

二、MapReduce架構

< 未完>

三、MapReduce執行流程

技術分享

執行流程說明:

1. 如果在HDFS上存在一份數據,這份數據被分成4個Block存儲(這裏假設一個Block就是一個Record), 當MapReduce處理這份數據時,會啟動4個Map Task去批量處理,輸出的結果是鍵值對形式

2. Map Task將輸出結果寫入內存緩沖區(memory buffer),並根據設定Reduce個數據對內存緩沖區裏的數據做partition,這時候內存緩沖區的數據有鍵值對形式變成三元組的形式,如上圖(Partition結果),三元組第一個元素為分區號,表示該行數據會分到哪個區。

3. 做完partition之後接著就是sort, 這裏排序有2次

  3.1 第一次排序:對分區號做排序

  3.2 第二次排序:對每個分區裏的數據做排序

  2次排序之後得到的結果如上圖中紅框所示

4. 如果Map Task輸出的數據量很大,超過100M。當達到80M時spill線程會將結果溢寫到磁盤,在磁盤上可能會產生很多個spill文件,

5. 當所有的Map Task執行完之後,MapReduce框架將多個spill文件merge成一個大的文件,這個大文件也是分區好了的

6. 這時TaskTracker通過心跳上報JobTracker, 告訴JobTracker Map Task任務已經跑完了,JobTracker將分配Reduce資源,然後TaskTracker將第5步驟裏的大文件按分區號遠程拷貝到Reduce機器上

7. Reduce Task對Map Task輸出的結果處理,然後生成處理結果寫入到HDFS上。註意:一個Reduce Task產生一個文件。

MapReduce架構與執行流程