司雅楠
?
Hadoop2.0平臺概述
司雅楠
(河南師范大學 網絡中心,河南 新鄉 453007)
Hadoop2.0的HDFS(Hadoop Distributed File System,Hadoop分布式文件系統)解決了單點失效和內存受限的問題,此外,還加入了新的構架YARN(Yet Aother Resource Negotiator,另一種資源協調者),可有效減輕之前版本中主節點的工作壓力,此外,在YARN之上可以運行MapReduce以外的其他多種并行計算模型和計算框架,提高了Hadoop平臺并行化編程的靈活性。
Hadoop;YARN;并行計算;單點失效
Hadoop是一個開源的框架,具有低成本、高可靠性和高容錯性的特性,同時,具有更靈活的處理能力,在互聯網行業得到了廣泛的應用[1]。Hadoop在發展和使用過程中也發現了系統性能方面的不足,并進行了不斷改進。
Hadoop設計之初是為了處理高吞吐率的線下批處理任務。Hadoop1.0中HDFS文件系統單一NameNode節點隨著數據規模的發展出現了單點性能瓶頸、單點失效和擴展性差的問題[2]。MapReduce并行計算模型是Hadoop1.0中唯一的計算框架,MapReduce的任務調度延時高,很多使用Hadoop的用戶都將其作為離線分析平臺,同時MapReduce存在JobTracker單點失效問題和系統擴展性問題,制約了Hadoop的系統性能。
為了解決Hadoop1.0存在主從結構中主節點單點瓶頸影響整個系統性能并且不支持多計算和編程模式的問題,Hadoop2.0版本應運而生[3],其主要包含三個部分:HDFS文件系統、MapRduce計算模型和YARN另一種資源協調者。其框架如圖1所示。

圖1 Hadopp2.0框架圖
針對上述Hadoop1.0版本中HDFS所存在的問題,Hadoop2.0 HDFS解決了之前版本中單點失效和內存受限的問題。
2.1.1 HDFS的HA機制
Hadoop2.0中HDFS文件系統增加了HA功能,以解決NameNode單點失效問題。HA機制中設置了主/備NameNode節點,來解決NameNode單點失效問題[4]。
主NameNode節點處于活動狀態(NameNode Active)對外提供服務,備用NameNode節點(NameNode Standby)同步主NameNode節點的元數據,作為主節點的熱備。兩個節點共享存儲,隨時等待切換。DataNode節點仍然負責數據塊的冗余存儲,所有DataNode同時向主備NameNode節點匯報數據塊狀態信息。
2.1.2 HDFS的Federation
Hadoop2.0中的HDFS Federation就是針對Hadoop1.0中HDFS構架上的缺陷所做的改進,擁有多個NameNode所構成的集群,并且支持多個命名空間,以解決Hadoop1.0中HDFS內存受限所導致的問題。
HDFS Federation對HDFS的命名空間服務做了水平方向上的擴展,在保證其魯棒性的同時集群中采用多個獨立的NameNode節點共同工作。在HDFS Federation中,NameNode節點之間相互獨立,僅是聯盟關系,且相互之間不需要進行協調。聯盟中的NameNode節點都具有命名空間和對數據塊的管理功能。各個NameNode節點共享DataNode的存儲。每一個DataNode節點都會向所在集群中所有的Namenode節點進行注冊,并且執行來自NameNode的指令,同時按照一定的時間間隔向NameNode節點發送數據塊位的置信息報告和心跳信息。HDFS Federation擁有多個獨立的命名空間(Namespace),并且每個命名空間都有屬于自己的一組block(塊),這樣的一組block稱作塊池(Block pool)。DataNode和Block pool之間沒有對應關系,一個DataNode節點可以同時為多個Block pool存放數據塊。由于同時存在多個NameNode節點,因此任何一個NameNode都可以動態地加入、刪除和更新,從而很好地保證當某一個Namenode節點失效時并不會影響DataNode節點為其他的Namenode節點提供數據塊存儲服務。
為了解決Hadoop1.0版本中MapReduce功能不足的問題,Hadoop2.0版本中引入了新的資源管理器YARN[5]。YARN的基本思想是將MRV1中原本由JobTracker負責的資源管理和作業調度功能拆分開,分別交給全局資源管理器(ResourceManager,RM)和多個針對應用程序的應用程序管理器(ApplicationMaster,AM)負責作業的調度功能。YANR在某種意義上來說算是一個云操作系統,由它來負責集群的資源管理。在YARN之上不僅可以運行像MapReduce這樣的離線數據處理框架,還可以運行諸如Spark、Storm等實時數據處理框架。
2.2.1 YARN的主要構成部分
從整體結構來看YARN仍是采用Master/Slave主從結構,其中RM為Master,節點管理器(NodeManager,NM)為Slave[6]。YARN主要由ResourceManager、Application-Master、NodeManager和Container四個主要組件構成[7]。它們的主要功能和組成部分如下。
ResourceManager(RM):全局資源管理器。其主要任務是對整個系統中的資源進行分配,由Capacity Scheduler(調度器)和Applications Manager(ASM,應用程序管理器)兩個組件構成。Capacity Scheduler按照需要把系統的資源分配給正在運行中的應用程序。而資源分配的單位為Container。ASM對系統中的應用程序進行管理,其主要職責包括提交應用程序、與Capacity Scheduler共同完成AM的啟動,同時對AM的運行狀態進行監督,并在AM宕機時提供重啟服務等。
ApplicationMaster(AM):應用程序管理器。用戶提交的應用程序中都包含一個負責對其進行監控和管理的主控AM節點。AM主要負責給任務分配相應的資源;協同控制任務的啟動/停止;監控任務的運行狀態;任務失敗時為任務重新申請所需要的運行資源。
NodeManager(NM):節點管理器。NM負責對每個節點上的任務和資源進行管理,主要任務是按照一定時間間隔向RM報告該節點上所有Container的活動狀態和資源的使用情況;接收并處理來自AM的Container啟動/停止等請求。
Container:作為YARN中的資源抽象,Container將某個節點上所需要的內存、CPU、磁盤、網絡等資源封裝起來,是動態的資源分配單位。當應用程序通過AM向RM申請資源時,RM會以Container的形式將資源返回給AM。
2.2.2 YARN的工作流程
應用程序提交到YARN平臺后,YARN首先啟用AM,然后由AM創建相應的應用程序,為應用程序申請資源,并監控它的整個運行過程,直到程序運行結束。
YARN的具體工作流程如圖2所示。

圖2 YARN的工作流程
YARN的工作流程具體如下:①用戶將應用程序提交給YARN,其中包括用戶程序、啟動AM的命令等內容,如圖中的連線1;②RM會按照應用程序的需求將內存、CPU、磁盤、網絡等資源封裝成一個Container,同時與相應的NM建立通信,通過它啟用負責該應用程序的AM,如圖中連線2;③AM需要在RM中進行注冊后才可以為作業中的每個任務申請相應的資源,此后AM會對任務的運行狀態進行監控,一直到任務完成為止,如圖中的連線3;④在整個運行過程中,資源的分配并不是一次完成的,需要AM采用輪詢的方式,通過遠程過程調用協議不斷地向RM申請和領取所需要的資源,如圖中的連線4;⑤當AM申請到以Container的形式封裝的所需資源后,會將Container中的資源連同該任務運行所需的環境進行封裝,并與相應的NM進行通信,要求其啟動任務,如圖中的連線5;⑥由NM為任務配置環境變量、二進制進程、JAR包等運行環境后,將任務啟動命令寫到一個腳本中去,并通過運行該腳本來啟動任務,如圖中的連線6;⑦在任務運行過程中,各個Task需要定時通過遠程過程調用協議向AM匯報自己的運行進度和狀態信息,這樣一旦Task失敗或者出錯AM可以及時對任務進行重啟,用戶也可以隨時通過遠程過程調用協議向AM查詢應用程序當前的運行狀態,如圖中的連線7;⑧當應用程序運行完畢后,AM會向RM匯報情況,申請注銷并關閉自己,如圖中的連線8.
通過以上過程可知,YARN的工作核心是通過AM向RM動態的申請資源,而具體的任務量的分配、數據塊的劃分、任務的啟動和監控工作狀態等工作是由AM來完成的,各個Task只需要負責自己的計算任務。
Hadoop平臺中的YARN不僅僅是一個計算框架而是一個框架管理者,用戶可以根據需要編寫針對自己應用程序的ApplicationMaster。離線計算、實時計算等多種應用都可以運行在YARN集群中,因此YARN可以支持除了MapReduce之外的更多計算框架,比如Spark on YARN、Storm on YARN等,并根據應用程序的需要調整資源的使用量,實現資源的彈性管理。
[1]潘燕紅.基于Hadoop平臺和Mahout框架的推薦系統研究與實現[D].杭州:浙江大學,2015.
[2]鄧鵬,李枚毅,何誠.Namenode單點故障解決方案研究[J].計算機工程,2012,38(21):40-44.
[3]林麗.基于Hadoop2.0的推薦系統研究[D].新鄉:河南師范大學,2014.
[4]王剛.云平臺下HDFS HA的研究與實現[D].西安:西北大學,2013.
[5]董春濤,李文婷,沈晴霓,等.Hadoop YARN大數據計算框架及其資源調度機制研究[J].信息通信技術,2015(01):77-84.
[6]楊卓犖.基于YARN構建多功能分布式集群[J].程序員,2013(06).
[7]Huang J W,Nicol D M,Campbell R H.Denial-of Service Threat to Hadoop/YARN Clusters with MultiTenancy[C]//2014 IEEE International Congress on Big Data,2014.
2095-6835(2019)05-0065-02
G258.6
A
10.15913/j.cnki.kjycx.2019.05.065
〔編輯:張思楠〕