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