spark on yarn的 cluster模式 和 client模式 提交運行流程

spark on yarn的 cluster模式 和 client模式 提交運行流程

---client 模式:

 

根據上面兩個流程圖得出:

每一個spark程序打成的jar包就是一個application,jar包提交到集羣之後啓動進程

spark driver在客戶端,向yarn集羣(resourceManager)請求資源,driver端同時初始化DAGSchulder,TaskSchulder,SchulderBackend和HeartbeatReceiver,啓動SchedulerBackend 以及 HeartbeatReceiver,driver端劃分stage、task。

 

yarn集羣發送一個nodeManager供spark 程序啓動applicationMaster。

 

applicationMaster請求到資源後啓動相應個數的nodeManager用於運行spark(executor端)程序,SchedulerBackend 開始向applicationMaster請求資源,SchedulerBackend 不斷向TaskSchulder獲取合適的task分發到executor端。

 

每個nodeManager 需要定時向resourceManager向HeartbeatReceiver發送心跳信息,同時向SchedulerBackend 通知executor的執行結果,然後schedulerBackend向TaskScheduler發送task執行情況,TaskScheduler把task執行情況發送給TaskManager,TaskManager記錄了task的執行情況。

 

-----特點(也是cluster模式和client模式的區別):

因爲driver運行在本地機器上,所以Client模式的客戶端不能殺掉

因爲通常情況下client模式,driver運行在本地和yarn不是在一個機房所以性能不是很好。

client模式會導致本地機器負責資源的調度,所以會引起網卡流量激增

---cluster 模式:

 

 

根據上面兩個流程圖得出:

每一個spark程序打成的jar包就是一個application。

jar包提交到集羣之後啓動進程,程序在yarn集羣的一個nodeManager上向resourceManager請求資源,同時這個nodeManager也是spark程序的applicationMaster(driver端)。這時已經初始化了DAGSchulder,TaskSchulder,SchulderBackend和HeartbeatReceiver,啓動SchedulerBackend 以及 HeartbeatReceiver,driver端劃分stage、task。

 

applicationMaster請求到資源後啓動相應個數的nodeManager用於運行spark(executor端)程序。

 

SchedulerBackend 開始向applicationMaster請求executor資源,同時和TaskSchulder交互獲取合適的task並分發到executor端運行程序。

 

每個nodeManager中的executor需要定時向resourceManager(driver端)的HeartbeatReceiver發送心跳信息,同時向SchedulerBackend 通知executor的執行結果,然後schedulerBackend向TaskScheduler發送task執行情況,TaskScheduler把task執行情況發送給TaskManager,TaskManager記錄了task的執行情況。

 

 

 

--------特點(也是cluster模式和client模式的區別):

因爲driver不是運行在本地機器上而是運行在yarn的某一個nodeManager上,所以Cluster模式的客戶端可以殺掉

因爲通常情況下cluster模式driver和yarn集羣是在一個機房所以性能很好

cluster模式沒有流量激增的問題

 

 

 

spark任務提交運行流程:

Application --> 多個job --> 多個stage --> 多個task

1.Spark的driver端只是用來請求資源獲取資源的,executor端是用來執行代碼程序,也就是說application是在driver端,而job 、stage 、task都是在executor端。

2.在executor端劃分job、劃分stage、劃分task。

程序遇見action算子劃分一次job,每個job遇見shuffle(或者寬依賴)劃分一次stage,每個stage中最後一個rdd的分區(分片)數就是task數量。

|--DAGScheduler(有向無環圖信息,劃分stage) 
|--TaskScheduler(存放TaskSet,與SchedulerBackend結合向executor發送task任務) 
    |--DAGScheduler劃分之後得taskSet被TaskScheduler封裝成TaskManager,
       最後TaskScheduler是以TaskManager爲單位發送給SchedulerBackend
|--heartbeatReceiver(心跳連接) 
|--ShcedulerBackend(和applicationMaster交互請求資源,和executor端交互獲取task運行情況,然後講結果反饋給TaskScheduler)
|--ApplicationMaster(向yarn的ResourceManager請求資源,獲取到資源啓動executor並將啓動的executor信息反饋給SchedulerBackend)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章