http://yuedu.baidu.com/ebook/d128cf8e33687e21ae45a935?pn=1&click_type=10010002
2.3 Hadoop原理
2.3.1 Hadoop HDFS原理
HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。
HDFS采用master/slave架構。
一個HDFS集群是由一個NameNode和一定數目的DataNodes組成。
NameNode是一個中心服務器,負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。
DataNode一般是一個節點一個,負責管理它所在節點上的存儲。
HDFS數據上傳原理可以參考圖2-5對照理解,數據上傳過程如下所示:
1)Client端發送一個添加文件到HDFS的請求給NameNode;
2)NameNode告訴Client端如何來分發數據塊以及分發的位置;
3)Client端把數據分為塊(block),然后把這些塊分發到DataNode中;
4)DataNode在NameNode的指導下復制這些塊,保持冗余。
2.3.2 Hadoop MapReduce原理
適合用MapReduce來處理的數據集(或任務),需要滿足:待處理的數據集可以分解成許多小的數據集,而且每一個小數據集都可以完全並行地進行處理。
Hadoop MapReduce極大地方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統上。
一個MapReduce作業(job)通常會把輸入的數據集切分為若干獨立的數據塊,由map任務(task)以完全並行的方式處理它們。框架會對map的輸出先進行排序,然后把結果輸入給reduce任務。通常,作業的輸入和輸出都會被存儲在文件系統中。整個框架負責任務的調度和監控,以及重新執行已經失敗的任務。
MapReduce框架包括
一個主節點(ResourceManager)、
多個子節點(運行NodeManager)
MRAppMaster(每個任務一個)
共同組成。
Hadoop的job client提交作業(jar包/可執行程序等)和配置信息給ResourceManager,后者負責分發這些軟件和配置信息給slave、調度任務且監控它們的執行,同時提供狀態和診斷信息給job-client。
MapReduce框架的流程如圖2-6所示。
針對上面的流程可以分為兩個階段來描述。
(1)Map階段
1)InputFormat根據輸入文件產生鍵值對,並傳送到Mapper類的map函數中;
2)map輸出鍵值對到一個沒有排序的緩沖內存中;
3)當緩沖內存達到給定值或者map任務完成,在緩沖內存中的鍵值對就會被排序,然后輸出到磁盤中的溢出文件;
4)如果有多個溢出文件,那么就會整合這些文件到一個文件中,且是排序的;
5)這些排序過的、在溢出文件中的鍵值對會等待Reducer的獲取。
(2)Reduce階段
1)Reducer獲取Mapper的記錄,然后產生另外的鍵值對,最后輸出到HDFS中; 2)shuffle:相同的key被傳送到同一個的Reducer中; 3)當有一個Mapper完成后,Reducer就開始獲取相關數據,所有的溢出文件會被排序到一個內存緩沖區中; 4)當內存緩沖區滿了后,就會產生溢出文件到本地磁盤; 5)當Reducer所有相關的數據都傳輸完成后,所有溢出文件就會被整合和排序; 6)Reducer中的reduce方法針對每個key調用一次; 7)Reducer的輸出到HDFS。
2.3.3 Hadoop YARN原理
MapReduce的最嚴重的限制主要關系到可伸縮性、資源利用和對與MapReduce不同的工作負載的支持。
全新的Hadoop架構——YARN(也稱為MRv2)。下一代Hadoop計算平台,主要包括ResourceManager、ApplicationMaster、NodeManager
ResourceManager用來代替集群管理器, ApplicationMaster代替一個專用且短暫的JobTracker, NodeManager代替TaskTracker。