(中國計量大學 浙江 杭州 310000)
Hadoop是一個開源的、可靠的、可擴展的分布式并行計算框架。它起源于Hadoop之父Doug Cutting開創的開源軟件Lucene,Lucene是Doug Cutting 用java語言實現的于Google類似的全文搜索功能的項目,它提供了全文檢索引擎的架構,包括完成的查詢引擎和索引引擎。
2001年底Lucene成為了apache軟件基金會Jakarta的一個子項目,它的目的在于為軟件開發人員提供一個簡單易用的工具包以方便的在目標系統中實現全文檢索功能,或者是以此為基礎建立起完整的全文檢索引擎。對于大數據的場景,Lucene面對著和Google相同的困難。迫使Doug Cutting 學習和模仿Google解決這些問題的辦法。Nutch項目由此誕生。
2003年-2004年,Google公開了部分GFS和MapReduce思想的細節,以此為基礎Doug Cutting等人用了2年的業余時間實現了DFS和MapReduce機制,Nutch性能飆升。這里還要提一下Google的另一篇論文BigTable,依據這篇論文的思想,衍生出了Hbase,可以說,Google的三篇論文GFS、MapReduce、BigTable是Hadoop的思想起源。
Hadoop于2005年秋天作為Lucene的子項目Nutch的一部分正式引入Apache基金會。2006年3月份,Map-Reduce 和 Nutch Distributed File System(NDFS)分別被納入稱為Hadoop的項目中。至于Hadoop這個項目名稱,來源于Doug Cutting孩子的玩具大象。
Hadoop已經成為實現云計算的事實標準開源軟件,包含數十個具有強大生命力的子項目(現在說的Hadoop已經不單單指示Hadoop這個項目,更多的是指Hadoop的生態)以及能在數千節點上運行,處理數據量和排序時間不斷打破世界紀錄,這是目前Hadoop達到的高度。
Hadoop項目中主要包括以下四個模塊:
Hadoop Common:為其他Hadoop模塊提供基礎設施。
Hadoop HDFS:一個高可靠、高吞吐量的分布式文件系統。
Hadoop MapReduce:一個分布式的離線并行計算框架。
Hadoop YARN:一個新的MapRecude框架,任務調度和資源管理。
本文重點介紹了YARN架構,簡單了介紹了MapReduce的運行機制
YARN(Yet Another Resource Negotiator,另一種資源協調者),負責hadoop集群中的資源調度與管理。
YARN服務的功能:ResourceManager、NodeMangaer、ApplicationMaster、Conitainer
ReousrceManager:
(1)處理客戶端請求(2)啟動/監控ApplicationMaster(3)監控NodeManager(4)資源分配與調度
NodeManager:
(1)單個節點上的資源管理(2)處理來自ResourceManager的命令(3)處理來自ApplicationMaster的命令
ApplicationMaster:
(1)數據切分(2)為應用程序申請資源,并分配給內部任務(3)任務監控與容錯
Container:對任務運行環境的抽象,封裝了CPU、內存等多維資源以及環境變量、啟動命令等任務運行相關的信息
從來自Apache官網的YARN架構圖可知,ReousrceManager和NodeManager也是一個主從架構,ReousrceManager是整個集群的資源管理進程,NodeManager是單臺服務器上的節點管理者

這里先提一下hadoop中的另一個架構:MapReduce 分布式離線并行計算框架。MapReduce運行在Yarn上。MapReduce的核心思想就是分而治之,Map執行分操作,此階段并行處理輸入數據,Reduce執行合操作此階段對Map結果進行匯總,suffle連接Map和Reduce兩個階段 。 MapReduce僅適合離線批處理,具有很好的容錯性和擴展性,適合簡單的批處理任務,但它的缺點也很明顯,它的啟動的開銷過大而且執行過程中頻繁的對數據進行讀寫,因此效率低下(受IO影響較大)。下面是MapReduce在Yarn上的運行過程

客戶端向ResourceManager提交任務(1)ResourceManager向每一個NodeMangager分配一個 ApplicationsMaster,ApplicationsMaster的作用就是對NodeManager中單個作業的資源管理和任務監控(2),NodeManager收到請求后會計算出處理任務所需要的CPU、內存等資源,然后向ResourceManager發出資源請求(3),ResourceManager響應請求調度資源,NodeManager獲取到計算機資源后將這些資源封裝在Container內(4),Container內的MR APP Mstr(5)開始執行到map操作和Reducec操作(6),執行完畢后(7)向ResourceManager釋放申請的資源(8)。這里也許有人會問,每個服務器節點不都是有屬于自己的cpu、內存資源嗎為什么還需要向集群申請呢。這就是YARN的作用之一,YARN將整個集群的計算機資源集中到一起交由ResourceManager統一管理(CPU、內存等,但不包括磁盤資源,磁盤由HDFS管理)。