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