溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spark on yarn執(zhí)行流程是怎樣的

發(fā)布時(shí)間:2021-12-16 15:02:50 來源:億速云 閱讀:442 作者:iii 欄目:云計(jì)算

本篇內(nèi)容介紹了“Spark on yarn執(zhí)行流程是怎樣的”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

很多公司都是通過Yarn來進(jìn)行調(diào)度,mapreduce on yarn、spark on yarn、甚至storm on yarn。

Yarn集群分成兩種節(jié)點(diǎn):

  • ResourceManager負(fù)責(zé)資源的調(diào)度;

  • NodeManager負(fù)責(zé)資源的分配、應(yīng)用程序執(zhí)行這些東西。

  • 通過Spark-submit腳本來提交,用yarn-client提交模式,這種模式其實(shí)會(huì)在本地啟動(dòng)起來driver程序

Spark on yarn執(zhí)行流程

        我們寫的spark程序,打成jar包,用spark-submit來提交。jar包中的一個(gè)main類,通過jvm的命令啟動(dòng)起來。JVM進(jìn)程,這個(gè)進(jìn)程,其實(shí)就是咱們的Driver進(jìn)程。Driver進(jìn)程啟動(dòng)起來以后,執(zhí)行我們自己寫的main函數(shù),從new SparkContext()。。。

  1. 在客戶端給我們啟動(dòng)一個(gè)driver

  2. 去ResourceManager申請(qǐng)啟動(dòng)container(資源)

  3. 通知一個(gè)NodeManager在container里面啟動(dòng)ApplicationMaster

  4. ApplicationMaster去找ResourceManager申請(qǐng)Executor

  5. ResourceManager返回可以啟動(dòng)的NodeManager的地址

  6. ApplicationMaster去找NodeManager啟動(dòng)Executor

  7. Executor進(jìn)程會(huì)反過來去向Driver注冊(cè)上去

  8. 最后Driver接收到了Executor資源之后就可以去進(jìn)行我們spark代碼的執(zhí)行了

  9. 執(zhí)行到某個(gè)action就觸發(fā)一個(gè)JOB

  10. DAGScheduler會(huì)劃分JOB為一個(gè)個(gè)Stage

  11. TaskScheduler會(huì)劃分Stage為一個(gè)個(gè)Task

  12. Task發(fā)送到Executor執(zhí)行

  13. Driver就來進(jìn)行Task的調(diào)度

Application-Master???

  • yarn中的核心概念,任何要在yarn上啟動(dòng)的作業(yè)類型(mr、spark),都必須有一個(gè)。每種計(jì)算框架(mr、spark),如果想要在yarn上執(zhí)行自己的計(jì)算應(yīng)用,那么就必須自己實(shí)現(xiàn)和提供一個(gè)ApplicationMaster相當(dāng)于是實(shí)現(xiàn)了yarn提供的接口,spark自己開發(fā)的一個(gè)類

  • spark在yarn-client模式下,application的注冊(cè)(executor的申請(qǐng))和計(jì)算task的調(diào)度,是分離開來的。standalone模式下,這兩個(gè)操作都是driver負(fù)責(zé)的。

  • ApplicationMaster(ExecutorLauncher)負(fù)責(zé)executor的申請(qǐng);driver負(fù)責(zé)job和stage的劃分,以及task的創(chuàng)建、分配和調(diào)度

yarn-client模式下,會(huì)產(chǎn)生什么樣的問題呢?

  • 由于咱們的driver是啟動(dòng)在本地機(jī)器的,而且driver是全權(quán)負(fù)責(zé)所有的任務(wù)的調(diào)度的,也就是說要跟yarn集群上運(yùn)行的多個(gè)executor進(jìn)行頻繁的通信(中間有task的啟動(dòng)消息、task的執(zhí)行統(tǒng)計(jì)消息、task的運(yùn)行狀態(tài)、shuffle的輸出結(jié)果)。

  • 咱們來想象一下。比如你的executor有100個(gè),stage有10個(gè),task有1000個(gè)。每個(gè)stage運(yùn)行的時(shí)候,都有1000個(gè)task提交到executor上面去運(yùn)行,平均每個(gè)executor有10個(gè)task。接下來問題來了,driver要頻繁地跟executor上運(yùn)行的1000個(gè)task進(jìn)行通信。通信消息特別多,通信的頻率特別高。運(yùn)行完一個(gè)stage,接著運(yùn)行下一個(gè)stage,又是頻繁的通信。

  • 在整個(gè)spark運(yùn)行的生命周期內(nèi),都會(huì)頻繁的去進(jìn)行通信和調(diào)度。所有這一切通信和調(diào)度都是從你的本地機(jī)器上發(fā)出去的,和接收到的。這是最要人命的地方。你的本地機(jī)器,很可能在30分鐘內(nèi)(spark作業(yè)運(yùn)行的周期內(nèi)),進(jìn)行頻繁大量的網(wǎng)絡(luò)通信。那么此時(shí),你的本地機(jī)器的網(wǎng)絡(luò)通信負(fù)載是非常非常高的。會(huì)導(dǎo)致你的本地機(jī)器的網(wǎng)卡流量會(huì)激增!?。?/p>

  • 你的本地機(jī)器的網(wǎng)卡流量激增,當(dāng)然不是一件好事了。因?yàn)樵谝恍┐蟮墓纠锩?,?duì)每臺(tái)機(jī)器的使用情況,都是有監(jiān)控的。不會(huì)允許單個(gè)機(jī)器出現(xiàn)耗費(fèi)大量網(wǎng)絡(luò)帶寬等等這種資源的情況。運(yùn)維人員不會(huì)允許。可能對(duì)公司的網(wǎng)絡(luò),或者其他(你的機(jī)器還是一臺(tái)虛擬機(jī)),如果你是一臺(tái)虛擬機(jī)的話,和其他機(jī)器共享網(wǎng)卡的話,可能對(duì)其他機(jī)器,公司整個(gè)網(wǎng)絡(luò)環(huán)境,都會(huì)有負(fù)面和惡劣的影響。

解決的方法:

  • 實(shí)際上解決的方法很簡單,就是心里要清楚,yarn-client模式是什么情況下,可以使用的?

    • yarn-client模式,通常咱們就只會(huì)使用在測(cè)試環(huán)境中,你寫好了某個(gè)spark作業(yè),打了一個(gè)jar包,在某臺(tái)測(cè)試機(jī)器上,用yarn-client模式去提交一下。因?yàn)闇y(cè)試的行為是偶爾為之的,不會(huì)長時(shí)間連續(xù)提交大量的spark作業(yè)去測(cè)試。還有一點(diǎn)好處,yarn-client模式提交,可以在本地機(jī)器觀察到詳細(xì)全面的log。通過查看log,可以去解決線上報(bào)錯(cuò)的故障(troubleshooting)、對(duì)性能進(jìn)行觀察并進(jìn)行性能調(diào)優(yōu)。

  • 實(shí)際上線了以后,在生產(chǎn)環(huán)境中,都得用yarn-cluster模式,去提交你的spark作業(yè)。

    • yarn-cluster模式,就跟你的本地機(jī)器引起的網(wǎng)卡流量激增的問題,就沒有關(guān)系了。也就是說,就算有問題,也應(yīng)該是yarn運(yùn)維團(tuán)隊(duì)和基礎(chǔ)運(yùn)維團(tuán)隊(duì)之間的事情了。他們?nèi)タ紤]Yarn集群里面每臺(tái)機(jī)器是虛擬機(jī)還是物理機(jī)呢?網(wǎng)卡流量激增后會(huì)不會(huì)對(duì)其他東西產(chǎn)生影響呢?如果網(wǎng)絡(luò)流量激增,要不要給Yarn集群增加一些網(wǎng)絡(luò)帶寬等等這些東西。那就是他們倆個(gè)團(tuán)隊(duì)的事情了,和你就沒有關(guān)系了

  • 使用了yarn-cluster模式以后,

    • 就不是你的本地機(jī)器運(yùn)行Driver,進(jìn)行task調(diào)度了。是yarn集群中,某個(gè)節(jié)點(diǎn)會(huì)運(yùn)行driver進(jìn)程,負(fù)責(zé)task調(diào)度。

“Spark on yarn執(zhí)行流程是怎樣的”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI