尚學堂大數據筆記:深入理解MapReduce

說起MapReduce,可以從思想、模型和運算及應用過程等幾個方面來進行理解。首先,來簡單說說它的思想。MapReduce可以說是凝結了人類對數據處理工作的基本思想,即分類與彙總。我們都知道,MapReduce其實分為兩個階段,即map階段和reduce階段。map階段即映射階段,該階段主要負責對數據進行切分處理,reduce階段即歸約階段,也就是在map階段的處理結果上進行彙總。我們可以把它定位成一種用於大規模數據集並行運算的編程(算法)模型。

在實際應用中,MapReduce是Hadoop框架集群的核心之一,在HDFS的基礎上對海量數據進行運算。先來分別看一下map和reduce的詳細運算過程。

Map過程:

@Override

public void map(KEYIN key,VALUEIN value,Context context)

throws IOException,InterruptedException{

System.out.println("進入Map");

context.write(KEYOUT, VALUEOUT);

}

這裡KEYIN,VALUEIN就是在RecordReader中生成的Key和Value;這裡KEYOUT,VALUEOUT就是map的輸出。之後,Map的輸出到Reduce的輸入中間經過了一個複雜的過程:map的每個輸出都會先寫入緩存(buffer in memory,默認100MB,可以在job提交前通過io.sort.mb修改),該100MB的緩存有個閾值80MB(默認0.8)。注意,這裡引入了第三個類Partition。

Reduce過程:

在map過程中強調數據在本地計算,即優先數據在哪就把map任務分配到哪。而reducer是需要從所有map的輸出文件中把屬於自己的copy過來,所以會佔用網絡帶寬。從不同task tracker拿到的文件也是先寫入buffer(原理同map的寫入buffer),當buffer中的數據達到閾值,就寫入磁盤。存數據的過程叫merge,merge過程可以發生在:

(1)內存到內存的merge。默認關閉,如果開啟表示最後如果內存有數據,不會先全部寫入磁盤再回頭跟磁盤上的其它數據一起merge,而是直接在內存中merge,再與磁盤中的其它數據merge。

(2)內存到磁盤的merge。與map端的spill類似。

(3)磁盤到磁盤的merge。最後將所有(2)之後的文件進行最終merge,注意(1)的情況。

之後開始reduce的過程,即merge的最終輸出是reduce的輸入,reduce的輸出默認是輸出到HDFS上。輸出格式由OutputFormat類確定。

尚學堂大數據筆記:深入理解MapReduce

在這裡需要提及的是Yarn並不是MapReduce的替代者,它只是作為一種計算框架的資源管理系統而存在,所以在理解MapReduce的過程中,也應該瞭解其與Yarn的關係。尚學堂陳老師指出Yarn的存在有時會對MapReduce存在的問題進行一些補充:

1. Job Tracker存在單點故障;

2. Job Tracker完成太多任務,當MR任務非常多時,造成很大的內存開銷;

3.Task Tracker端,如果兩個大內存消耗的任務一起調度,容易出現OOM,如果只有Map任務或Reduce任務時會造成資源浪費。

那麼Yarn的機制與MapReduce相比有哪些優勢呢? 首先舊的MapReduce主要包括Job Tracker和Task Tracker,Yarn中主要是三個組件:Resource Manager、Node Manager和Application Master。Resource Manager負責全局資源分配,Application Master每個節點一個,負責當前節點的調度和協調。Node Manager是每臺機器的代理,監控應用程序的資源使用情況,並彙報給Resource Manager。因此與MapReduce相比,Yarn把資源管理與任務調度的工作分離開來,減少了MapReduce中Job Tracker的壓力。

從上面的講述中不難看出,相對於MapReduce,Yarn也有其自身的優勢:

1.Yarn大大減少了Job Tracker的資源消耗,並且讓監測每個Job子任務狀態的程序分佈式化了;

2.YARN中Application Master是一個可變更部分,用戶可以對不同編程模型編寫自己的AppMst,讓更多類型的編程模型能跑在Hadoop集群中;

3.在舊的框架裡,Job Tracker一個很大的負擔就是監控Job下任務的運行狀況,現在由Application Master去做,而Resource Manager是監測Application Master的運行狀況,如果出問題,會將其在其他機器上重啟。


分享到:


相關文章: