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

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

圖2 YARN的工作流程
YARN的工作流程具體如下:①用戶將應(yīng)用程序提交給YARN,其中包括用戶程序、啟動(dòng)AM的命令等內(nèi)容,如圖中的連線1;②RM會(huì)按照應(yīng)用程序的需求將內(nèi)存、CPU、磁盤(pán)、網(wǎng)絡(luò)等資源封裝成一個(gè)Container,同時(shí)與相應(yīng)的NM建立通信,通過(guò)它啟用負(fù)責(zé)該應(yīng)用程序的AM,如圖中連線2;③AM需要在RM中進(jìn)行注冊(cè)后才可以為作業(yè)中的每個(gè)任務(wù)申請(qǐng)相應(yīng)的資源,此后AM會(huì)對(duì)任務(wù)的運(yùn)行狀態(tài)進(jìn)行監(jiān)控,一直到任務(wù)完成為止,如圖中的連線3;④在整個(gè)運(yùn)行過(guò)程中,資源的分配并不是一次完成的,需要AM采用輪詢的方式,通過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議不斷地向RM申請(qǐng)和領(lǐng)取所需要的資源,如圖中的連線4;⑤當(dāng)AM申請(qǐng)到以Container的形式封裝的所需資源后,會(huì)將Container中的資源連同該任務(wù)運(yùn)行所需的環(huán)境進(jìn)行封裝,并與相應(yīng)的NM進(jìn)行通信,要求其啟動(dòng)任務(wù),如圖中的連線5;⑥由NM為任務(wù)配置環(huán)境變量、二進(jìn)制進(jìn)程、JAR包等運(yùn)行環(huán)境后,將任務(wù)啟動(dòng)命令寫(xiě)到一個(gè)腳本中去,并通過(guò)運(yùn)行該腳本來(lái)啟動(dòng)任務(wù),如圖中的連線6;⑦在任務(wù)運(yùn)行過(guò)程中,各個(gè)Task需要定時(shí)通過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議向AM匯報(bào)自己的運(yùn)行進(jìn)度和狀態(tài)信息,這樣一旦Task失敗或者出錯(cuò)AM可以及時(shí)對(duì)任務(wù)進(jìn)行重啟,用戶也可以隨時(shí)通過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議向AM查詢應(yīng)用程序當(dāng)前的運(yùn)行狀態(tài),如圖中的連線7;⑧當(dāng)應(yīng)用程序運(yùn)行完畢后,AM會(huì)向RM匯報(bào)情況,申請(qǐng)注銷并關(guān)閉自己,如圖中的連線8.
通過(guò)以上過(guò)程可知,YARN的工作核心是通過(guò)AM向RM動(dòng)態(tài)的申請(qǐng)資源,而具體的任務(wù)量的分配、數(shù)據(jù)塊的劃分、任務(wù)的啟動(dòng)和監(jiān)控工作狀態(tài)等工作是由AM來(lái)完成的,各個(gè)Task只需要負(fù)責(zé)自己的計(jì)算任務(wù)。
Hadoop平臺(tái)中的YARN不僅僅是一個(gè)計(jì)算框架而是一個(gè)框架管理者,用戶可以根據(jù)需要編寫(xiě)針對(duì)自己應(yīng)用程序的ApplicationMaster。離線計(jì)算、實(shí)時(shí)計(jì)算等多種應(yīng)用都可以運(yùn)行在YARN集群中,因此YARN可以支持除了MapReduce之外的更多計(jì)算框架,比如Spark on YARN、Storm on YARN等,并根據(jù)應(yīng)用程序的需要調(diào)整資源的使用量,實(shí)現(xiàn)資源的彈性管理。
[1]潘燕紅.基于Hadoop平臺(tái)和Mahout框架的推薦系統(tǒng)研究與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2015.
[2]鄧鵬,李枚毅,何誠(chéng).Namenode單點(diǎn)故障解決方案研究[J].計(jì)算機(jī)工程,2012,38(21):40-44.
[3]林麗.基于Hadoop2.0的推薦系統(tǒng)研究[D].新鄉(xiāng):河南師范大學(xué),2014.
[4]王剛.云平臺(tái)下HDFS HA的研究與實(shí)現(xiàn)[D].西安:西北大學(xué),2013.
[5]董春濤,李文婷,沈晴霓,等.Hadoop YARN大數(shù)據(jù)計(jì)算框架及其資源調(diào)度機(jī)制研究[J].信息通信技術(shù),2015(01):77-84.
[6]楊卓犖.基于YARN構(gòu)建多功能分布式集群[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
〔編輯:張思楠〕