大數(shù)據(jù)(Yarn)面試題及答案
- 介紹下YARN
● Yarn 是一個(gè)資源調(diào)度平臺(tái),負(fù)責(zé)為運(yùn)算程序提供服務(wù)器運(yùn)算資源,相當(dāng)于一個(gè)分布式的操作系統(tǒng)平臺(tái),而 MapReduce 等運(yùn)算程序則相當(dāng)于運(yùn)行于操作系統(tǒng)之上的應(yīng)用程序。
- YARN有幾個(gè)模塊
● Yarn架構(gòu)
○ ResourceManager(RM):
■ 1、處理客戶端的請(qǐng)求 ■ 2、監(jiān)控NodeManager ■ 3、啟動(dòng)或者監(jiān)控ApplicationMaster ■ 4、資源的調(diào)度和分配
○ NodeManager(NM):
■ 1、管理單個(gè)節(jié)點(diǎn)上的資源 ■ 2、處理來(lái)自ResourceManager的命令 ■ 3、處理來(lái)自ApplicationMaster的命令
○ ApplicationMaster(AM):
■ 1、負(fù)責(zé)數(shù)據(jù)的切分 ■ 2、為應(yīng)用程序申請(qǐng)資源并分配給內(nèi)部的任務(wù) ■ 3、任務(wù)的監(jiān)控與容錯(cuò)
○ Container:
■ 是Yarn中的資源抽象,它封裝了某個(gè)節(jié)點(diǎn)上的多維度資源,如內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等。
- YARN工作機(jī)制
● 4.3 工作機(jī)制
○
○ 1)作業(yè)提交
○ 2)作業(yè)初始化
○ 3)任務(wù)分配
○ 4)任務(wù)運(yùn)行
○ 5)進(jìn)度和狀態(tài)更新
○ 6)作業(yè)完成
○
● 第1步:Client調(diào)用job.waitForCompletion方法,向整個(gè)集群提交MapReduce作業(yè)。
● 第2步:Client向RM申請(qǐng)一個(gè)作業(yè)id。
● 第3步:RM給Client返回該job資源的提交路徑和作業(yè)id。
● 第4步:Client提交jar包、切片信息和配置文件到指定的資源提交路徑。
● 第5步:Client提交完資源后,向RM申請(qǐng)運(yùn)行ApplicationMaster。
● 第6步:當(dāng)RM收到Client的請(qǐng)求后,將該job添加到容量調(diào)度器中。
● 第7步:某一個(gè)空閑的NM領(lǐng)取到該Job。
● 第8步:該NM創(chuàng)建Container,并產(chǎn)生ApplicationMaster。
● 第9步:下載Client提交的資源到本地。
● 第10步:ApplicationMaster向RM申請(qǐng)運(yùn)行多個(gè)MapTask任務(wù)資源。
● 第11步:RM將運(yùn)行MapTask任務(wù)分配給另外兩個(gè)NodeManager,另兩個(gè)NodeManager分別領(lǐng)取任務(wù)并創(chuàng)建容器。
● 第12步:MR向兩個(gè)接收到任務(wù)的NodeManager發(fā)送程序啟動(dòng)腳本,這兩個(gè)NodeManager分別啟動(dòng)MapTask,MapTask對(duì)數(shù)據(jù)分區(qū)排序。
● 第13步:ApplicationMaster等待所有MapTask運(yùn)行完畢后,向RM申請(qǐng)容器,運(yùn)行ReduceTask。
● 第14步:ReduceTask向MapTask獲取相應(yīng)分區(qū)的數(shù)據(jù)。
● 第15步:程序運(yùn)行完畢后,MR會(huì)向RM申請(qǐng)注銷自己。
YARN有什么優(yōu)勢(shì),能解決什么問題?
1、解決了單點(diǎn)故障問題,由于每一個(gè)任務(wù)由一個(gè)AppMaster進(jìn)行調(diào)度,且可進(jìn)行AppMaster出錯(cuò)重試,從而使單點(diǎn)故障影響到多個(gè)任務(wù)進(jìn)行問題不存在。
2、解決了單點(diǎn)壓力過(guò)大問題,每一個(gè)任務(wù)由一個(gè)AppMaster進(jìn)行調(diào)度,而每一個(gè)AppMaster都是由集群中資源較為充足的結(jié)點(diǎn)進(jìn)行啟動(dòng),調(diào)度任務(wù),起到一個(gè)負(fù)載均衡的作用。
3、完成了資源管理和任務(wù)調(diào)度的解耦,Yarn只負(fù)責(zé)對(duì)集群資源的管理,各個(gè)計(jì)算框架只要繼承了AppMaster,就可以共同使用Yarn資源管理,更加充分地利用集群資源。
————————————————
版權(quán)聲明:本文為CSDN博主「eddieVim」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_44129784/article/details/109506958YARN容錯(cuò)機(jī)制
作為分布式系統(tǒng),YARN具備高容錯(cuò)性,各個(gè)服務(wù)組件的容錯(cuò)機(jī)制如下:
1、ApplicationMaster容錯(cuò):RM監(jiān)控AM的運(yùn)行狀態(tài),一旦發(fā)現(xiàn)它運(yùn)行失敗或者超時(shí),就會(huì)重新分配資源并啟動(dòng)它,啟動(dòng)之后AM內(nèi)部的狀態(tài)如何恢復(fù)由自己保證,比如MRAppMaster在作業(yè)運(yùn)行過(guò)程中將狀態(tài)信息動(dòng)態(tài)記錄到HDFS上,一旦出現(xiàn)故障重啟后,它能夠從HDFS讀取并恢復(fù)之前的運(yùn)行狀態(tài),減少重復(fù)計(jì)算帶來(lái)的開銷。
2、NodeManager容錯(cuò):NM超時(shí)沒有心跳,則RM認(rèn)為它死掉,會(huì)將上面的Container狀態(tài)置為失敗,并告訴對(duì)應(yīng)的ApplicationMaster,以決定如何處理這些Container中運(yùn)行的任務(wù)
3、Container容錯(cuò):如果AM在一定時(shí)間內(nèi)未啟動(dòng)分配到的Container,則RM會(huì)將該Container狀態(tài)置為失敗并回收它;如果一個(gè)Container在運(yùn)行過(guò)充中,因?yàn)橥饨缭驅(qū)е逻\(yùn)行失敗,則RM會(huì)轉(zhuǎn)告對(duì)應(yīng)的AM,由AM決定如何處理
4、RM容錯(cuò):至關(guān)重要,接下來(lái)介紹:
Hadoop HA基本框架
為了解決單點(diǎn)故障問題,Hadoop2.0中的HDFS和YARN均采用了基于共享存儲(chǔ)的HA解決方案,即Active Master不斷將信息寫入到一個(gè)共享存儲(chǔ)系統(tǒng),而Standby Master則不斷讀取這些信息,以與Active Master的內(nèi)存信息保持同步,當(dāng)需要主備切換時(shí),選中的Standby Master需先保證信息完全同步后,再將自己的角色切換至Active Master。
YARN HA采用的是基于Zookeeper的方案,MRv1采用的是基于HDFS的方案。
————————————————
解決HA問題需要考慮以下幾個(gè)問題
(1)腦裂問題
腦裂指主備切換時(shí),由于切換不徹底或者其他原因,導(dǎo)致客戶端和slave誤以為出現(xiàn)兩個(gè)Active Master,最終使得整個(gè)集群處于混論狀態(tài),通常采用隔離(fencing)機(jī)制解決。解決腦裂問題從三個(gè)方面考慮:
■ 共享存儲(chǔ)隔離:確保只有一個(gè)Master往共享存儲(chǔ)里寫數(shù)據(jù)
■ 客戶端隔離:確保只有一個(gè)Master可以相應(yīng)客戶端的請(qǐng)求
■ slave隔離:確保只有一個(gè)Master可以向slave下命令。
(2)切換對(duì)外透明
保證整個(gè)切換對(duì)外透明,保證所有客戶端和slave自動(dòng)重定向到新的Active Master,通常是通過(guò)若干次嘗試連接舊Master不成功后,重新嘗試連接新Master完成的,有一定延遲。
版權(quán)聲明:本文為CSDN博主「阿松0311」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_44773984/article/details/121718592
- YARN高可用
YARN將共享存儲(chǔ)系統(tǒng)抽象為RMStateStore(一個(gè)Java接口),以保存恢復(fù)RM所必須的信息:
Application狀態(tài)信息ApplicationState。包含應(yīng)用程序提交描述信息,提交時(shí)間,擁有者三個(gè)字段
Application對(duì)應(yīng)的每個(gè)ApplicationAttempt信息ApplicationAttemptState。包含attemptId、所在Container的信息masterContainer、安全Token三個(gè)字段
安全令牌相關(guān)信息。
RM不會(huì)保存已經(jīng)分配給AM的資源信息和每個(gè)NM的資源使用信息,這些都通過(guò) 相應(yīng)的心跳機(jī)制重構(gòu)出來(lái),所以RM HA是輕量級(jí)的。
RM提供了四種RMStateStore實(shí)現(xiàn):
NullRMStateStore(不存儲(chǔ)任何狀態(tài)信息,在不啟用恢復(fù)機(jī)制時(shí),它是默認(rèn)實(shí)現(xiàn)的)
MemoryRMStateStore(將狀態(tài)信息保存到內(nèi)存中,啟用恢復(fù)機(jī)制時(shí),它是默認(rèn)實(shí)現(xiàn)的)
FileSystemRMStateStore(狀態(tài)信息保存到HDFS中)
ZKRMStateStore(狀態(tài)信息保存到ZK上)
YARN HA采用基于ZKRMStateStore的共享存儲(chǔ)方案。
————————————————
版權(quán)聲明:本文為CSDN博主「阿松0311」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_44773984/article/details/121718592
YARN調(diào)度器
● 4.4 資源調(diào)度器○ 1)先進(jìn)先出調(diào)度器(FIFO)
■ 即先來(lái)先服務(wù),在該調(diào)度機(jī)制下,所有的作業(yè)統(tǒng)一提交到一個(gè)隊(duì)列中,Hadoop按照作業(yè)的提交順序一次執(zhí)行這些作業(yè)。
○ 2)容量調(diào)度器(Capacity Scheduler)
■ 1、支持多個(gè)隊(duì)列,每個(gè)隊(duì)列可以配置一定的資源,每個(gè)隊(duì)列采用FIFO的調(diào)度策略。
■ 2、為了防止同一個(gè)任務(wù)的作業(yè)獨(dú)占隊(duì)列中的資源,該調(diào)度器會(huì)限定同一用戶提交的作業(yè)的所占資源。首先,將作業(yè)分配給多個(gè)隊(duì)列中最閑的隊(duì)列。其次:按照作業(yè)優(yōu)先級(jí)和作業(yè)提交的先后順序,同時(shí)考慮用戶資源量限制和內(nèi)存限制對(duì)隊(duì)列內(nèi)的任務(wù)進(jìn)行排序。
■ 3、多個(gè)隊(duì)列并行執(zhí)行隊(duì)列中的任務(wù)。
○ 3)公平調(diào)度器(Fair Scheduler)(了解)
■ 使用公平調(diào)度器時(shí),不需要預(yù)留一定量的資源,因?yàn)檎{(diào)度器會(huì)在所有運(yùn)行的作業(yè)之間動(dòng)態(tài)平衡。
■ 第一個(gè)大作業(yè)啟動(dòng)時(shí),它是唯一運(yùn)行的作業(yè),因此獲得集群中所有資源。
■ 當(dāng)?shù)诙€(gè)小作業(yè)啟動(dòng)時(shí),它被分配到集群的一半資源,這樣每個(gè)作業(yè)都能公平共享資源。
YARN中Container是如何啟動(dòng)的?
https://blog.csdn.net/gaopenghigh/article/details/45507765/YARN監(jiān)控
Yarn模式概述
Spark客戶端可以直接連接Yarn,不需要額外構(gòu)建Spark集群。
有yarn-client和yarn-cluster兩種模式,主要區(qū)別在于:Driver程序的運(yùn)行節(jié)點(diǎn)不同。
yarn-client:Driver程序運(yùn)行在客戶端,適用于交互、調(diào)試,希望立即看到APP的輸出。
yarn-cluster:Driver程序運(yùn)行在RM(ResourceManager)啟動(dòng)的AM(AplicationMaster)上,適用于生產(chǎn)環(huán)境。
Yarn是一個(gè)資源調(diào)度平臺(tái),負(fù)責(zé)為運(yùn)算程序提供服務(wù)器計(jì)算資源,方便我們編寫的Spark、flink、MapReduce這些應(yīng)用在它上面運(yùn)行。
資源的具體分配和調(diào)度不需要人們手動(dòng)去操作,這種情況下,我們?cè)趺茨芸吹結(jié)arn機(jī)器有多少資源呢??jī)?nèi)存、CPU等。還有我們提交到Y(jié)arn的這些應(yīng)用,他們的運(yùn)行狀態(tài)是什么,占用率多少資源,哪個(gè)節(jié)點(diǎn)在計(jì)算,執(zhí)行時(shí)間等等,都是我們需要關(guān)注的問題。
修改Hadoop配置文件,進(jìn)行訪問,下面就是Yarn的界面。
about the cluster界面可以看到Y(jié)arn的ResourceManager的狀態(tài)、是否是HA、以及版本的信息。
上面編號(hào)為1區(qū)域的是整個(gè)集群的監(jiān)控信息:
Apps Submitted:已提交的應(yīng)用。
Apps Completed:已經(jīng)完成的應(yīng)用。
Apps Running:正在運(yùn)行的應(yīng)用。
Containers Running:正在運(yùn)行的應(yīng)用。
Memory Total:集群的總內(nèi)存。
Memory Used:集群已使用的內(nèi)存。
VCores Used:已經(jīng)使用CPU的核數(shù)。
VCores Total:集群的CPU總的核數(shù)。
Memory Reserved:預(yù)留的內(nèi)存。
VCores Reserved:預(yù)留的CPU的核數(shù)。
yarn為了防止分配一個(gè)容器到NodeManager的時(shí)候,NodeManager當(dāng)前不能滿足。
。。。。。。
https://cloud.tencent.com/developer/article/1643495