在大數(shù)據(jù)分析和計(jì)算領(lǐng)域,那必須是Hadoop的天下啊!經(jīng)過(guò)多年的發(fā)展,Hadoop家族也在不斷的壯大、完善、成熟,現(xiàn)已包含HDFS、MapReduce、Zookeeper、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari等組件。
HDFS是分布式文件系統(tǒng),負(fù)責(zé)超大數(shù)據(jù)的存儲(chǔ);HBase是提供高可靠、高性能、實(shí)時(shí)讀寫(xiě)的分布式列式數(shù)據(jù)庫(kù),主要存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)(底層依托HDFS);MapReduce是數(shù)據(jù)計(jì)算模型,負(fù)責(zé)海量的、負(fù)責(zé)的數(shù)據(jù)計(jì)算任務(wù)處理;Hive是數(shù)據(jù)倉(cāng)庫(kù),以MapReduce為底層能力進(jìn)行數(shù)據(jù)計(jì)算分析;Zookeeper是分布式服務(wù)協(xié)調(diào)框架,用于分布式應(yīng)用構(gòu)建和管理;Ambrari負(fù)責(zé)Hadoop集群的安裝、配置、部署管理;Flume提供高可用、高可靠、分布式的日志采集。
總而言之,Hadoop家族真的是非常強(qiáng)大啊,各種各樣的技術(shù)組件都有,這些技術(shù)組件拆開(kāi)在各個(gè)領(lǐng)域,都是一等一的高手,每個(gè)組件都有自己的資源調(diào)度系統(tǒng)管理自己任務(wù)的資源分配,為業(yè)務(wù)解決著各種各樣的問(wèn)題,日子過(guò)的風(fēng)生水起。
但是當(dāng)這些高手們都聚集在一起時(shí),問(wèn)題就出現(xiàn)了,有的組件可能申請(qǐng)不到資源,有的組件可能申請(qǐng)了過(guò)多資源不用,從而導(dǎo)致有的服務(wù)不能運(yùn)轉(zhuǎn)、有的服務(wù)資源過(guò)度浪費(fèi)。不過(guò)姜還是老的辣,我們一起來(lái)看看Hadoop是如何解決這場(chǎng)家族危機(jī)的吧?
Yarn(YetAnother Resource Negotiator)是Hadoop的集群資源調(diào)度框架,提供資源管理和任務(wù)調(diào)度兩大能力,為上層服務(wù)提供統(tǒng)一的資源管理和調(diào)度,提供資源利用率。
在介紹YARN之前,我們先來(lái)看看相關(guān)的名詞解釋。在YARN中有四個(gè)名詞,即ResourceManager、ApplicationMaster、NodeManager、Container,ResourceManager是全局的資源管理器(大管家),負(fù)責(zé)管理整個(gè)Hadoop集群的基礎(chǔ)資源(比如CPU、內(nèi)存),根據(jù)容量、隊(duì)列等情況,將資源分配給到各個(gè)正在運(yùn)行當(dāng)中的應(yīng)用程序;ApplicationMaster是具體應(yīng)用程序運(yùn)行時(shí)的管控者(小管家),它協(xié)調(diào)來(lái)自大管家的資源,分配資源給到應(yīng)用程序內(nèi)部使用,在任務(wù)運(yùn)行時(shí)進(jìn)行監(jiān)控,任務(wù)執(zhí)行失敗時(shí)重新申請(qǐng)資源并啟動(dòng)任務(wù);NodeManager是應(yīng)用程序中具體實(shí)例的資源管理(小小管家),它負(fù)責(zé)管理自己節(jié)點(diǎn)的整個(gè)生命運(yùn)行周期,接受來(lái)自小管家的安排(如啟動(dòng)、停止);Container負(fù)責(zé)具體實(shí)例的運(yùn)行(長(zhǎng)工),在負(fù)責(zé)運(yùn)行每個(gè)一個(gè)實(shí)例任務(wù),比如Spark計(jì)算任務(wù),同時(shí)接受小小管家的安排。
YARN是一個(gè)非常強(qiáng)大、非常可靠的資源共享型平臺(tái),它的應(yīng)用場(chǎng)景也很多,比如用于Spark任務(wù)調(diào)度,接收spark的任務(wù)并處理,比如用于MapReduce任務(wù)的生命周期管理,我們以Spark任務(wù)調(diào)度為例,來(lái)看看YARN的工作流程是怎么樣呢?
現(xiàn)在我們要執(zhí)行一個(gè)Spark計(jì)算任務(wù),Spark客戶端向YARN提交計(jì)算任務(wù)的應(yīng)用程序申請(qǐng);YARN的ResourceManager大管家收到請(qǐng)求之后,在整個(gè)資源池中尋找是否有資源可用,找到之后生成一個(gè)Container長(zhǎng)工,并分配N(xiāo)odeManager小小管家進(jìn)行管理,同時(shí)啟動(dòng)應(yīng)用程序的ApplicationMaster小管家;小管家在執(zhí)行應(yīng)用程序的任務(wù)之前,先把自己在大管家進(jìn)行報(bào)備,這樣用戶就可以在大管家那里查看應(yīng)用程序的運(yùn)行狀態(tài)并進(jìn)行管理了。
在長(zhǎng)工Container的任務(wù)開(kāi)始執(zhí)行后,小管家通過(guò)輪詢(xún)的方式不斷向大管家申請(qǐng)資源,并且把申請(qǐng)到的資源又分配給小小管家,安排它為長(zhǎng)工準(zhǔn)備好工作環(huán)境、隨時(shí)恭候干活,在干活的過(guò)程中,大管家、小管家、小小管家不斷的進(jìn)行通信交流,隨時(shí)知道各個(gè)長(zhǎng)工的工作狀態(tài)、任務(wù)完成情況,在出現(xiàn)問(wèn)題時(shí)及時(shí)出手進(jìn)行解決,保障任務(wù)的順利完成。任務(wù)完成之后,小管家向大管家會(huì)報(bào)工作,釋放資源。
YARN不止聚焦于Hadoop家族內(nèi)的資源管理,為了使自己變得更加強(qiáng)大,它還開(kāi)放了ApplicationMaster小管家的能力。通過(guò)上面的運(yùn)行流程我們也能看到,大管家、小小管家、長(zhǎng)工都和業(yè)務(wù)沒(méi)關(guān)系,只是任務(wù)執(zhí)行流水線上的一環(huán),只有小管家才和業(yè)務(wù)緊密管理。YARN允許第三方框架集成ApplicationMaster,支持了更多的業(yè)務(wù)類(lèi)型,擴(kuò)展了自己的范圍。我們??吹降腗apReduceOn YARN、SparkOn YARN、StormOn YARN等解決方案便是在YARN原生能力的集成擴(kuò)展。
所謂沒(méi)有規(guī)矩,不成方圓。在一個(gè)技術(shù)生態(tài)出現(xiàn)之后,必然有對(duì)應(yīng)的管理體系出現(xiàn),正如Docker容器出現(xiàn)之后,容器調(diào)度系統(tǒng)DockerSwarm、Kubernetes就出現(xiàn)了一樣,Hadoop生態(tài)系統(tǒng)出現(xiàn)壯大后,YARN也隨之應(yīng)運(yùn)而生,一切都是為了更好的服務(wù)于業(yè)務(wù)。通過(guò)本文的講解,你明白了YARN是啥?如何工作?如何管控整個(gè)Hadoop家族了嗎?