談一談你對mapreduce 的理解?(大數據面試題系列~)

MapReduce 是一種用於數據處理的編程模型。我們可以這樣理解MapReduce, 把一堆雜亂無章的數據按照某種特徵歸納起來,然後處理並得到最後的結果。Map 面對的是雜亂無章的互不相關的數據,它解析每個數據,從中提取key 和value, 也就是提取了數據的特徵。經過MapReduce 的shuffle 階段之後,在Reduce 階段看到的都是歸納好的數據,然後再進行進一步的處理以得到結果。

Hadoop2 中的MapReduce 工作機制

1.客戶端開始運行MapReduce 作業

2.向資源管理器請求一個新的應用ID,用作MapReduce 作業ID

3.將運行作業所需要的資源(作業JAR 文件、配置文件和計算所得的輸入分片)複製到HDFS中以作業ID命名的目錄下

4.提交作業

5a.資源管理器分配一個容器

5b.在容器中啓動作業對應的application master 進程

6.作業的初始化

7.Application master 接收來自於HDFS 的、在客戶端計算的輸入分片。然後對每一個分片創建一個map 任務對象以及多個reduce 對象

application master 決定如何運行構成MapReduce 作業的各個任務。如果作業很小,就選擇在當前JVM 上運行任務,否則申請其它節點。

默認情況下,小作業就是少於10個mapper 且只有一個reducer 且輸入大小小於一個HDFS 塊的作業。

8.如果作業不是小作業,那麼application master 就會爲該作業中的所有map 任務和reduce 任務向資源管理器申請容器。

首先爲map 任務發出申請,這是因爲所有的map 任務必須在reduce 的排序階段能夠啓動前完成。直到有5% 的map 任務已經完成時,爲reduce 任務申請容器的請求才會發出。

9a 9b.一旦資源管理器爲任務分配了一個特定節點上的容器,application master 就通過與節點管理器通信來啓動容器。

10.在運行任務之前,首先將任務需要的資源本地化,包括任務作業的配置、JAR文件等。

11.運行任務(Map 任務 or Reduce 任務)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章