使用spark-submit提交到的各個模式原理圖解

Standalone-client提交任務方式

提交命令
./spark-submit 
--master spark://node1:7077 
--class org.apache.spark.examples.SparkPi 
../lib/spark-examples-1.6.0-hadoop2.6.0.jar 
1000


或者

./spark-submit 
--master spark://node1:7077 
--deploy-mode client 
--class org.apache.spark.examples.SparkPi 
../lib/spark-examples-1.6.0-hadoop2.6.0.jar 
100


執行原理圖解【完美圖示】

執行流程
client模式提交任務後,會在客戶端啓動Driver進程。
Driver會向Master申請啓動Application啓動的資源。
資源申請成功,Driver端將task發送到worker端執行。
worker將task執行結果返回到Driver端。


總結
client模式適用於測試調試程序。Driver進程是在客戶端啓動的,這裏的客戶端就是指提交應用程序的當前節點。在Driver端可以看到task執行的情況。生產環境下不能使用client模式,是因爲:假設要提交100個application到集羣運行,Driver每次都會在client端啓動,那麼就會導致客戶端100次網卡流量暴增的問題。

 Standalone-cluster提交任務方式


提交命令
./spark-submit 
--master spark://node1:7077 
--deploy-mode cluster
--class org.apache.spark.examples.SparkPi 
../lib/spark-examples-1.6.0-hadoop2.6.0.jar 
100


執行原理圖解【完美圖解】

執行流程
cluster模式提交應用程序後,會向Master請求啓動Driver.
Master接受請求,隨機在集羣一臺節點啓動Driver進程。
Driver啓動後爲當前的應用程序申請資源。
Driver端發送task到worker節點上執行。
worker將執行情況和執行結果返回給Driver端。


總結
Driver進程是在集羣某一臺Worker上啓動的,在客戶端是無法查看task的執行情況的。假設要提交100個application到集羣運行,每次Driver會隨機在集羣中某一臺Worker上啓動,那麼這100次網卡流量暴增的問題就散佈在集羣上。

總結Standalone兩種方式提交任務,Driver與集羣的通信包括:
1. Driver負責應用程序資源的申請

2. 任務的分發。

3. 結果的回收。

4. 監控task執行情況。

Yarn模式兩種提交任務方式
yarn-client提交任務方式


提交命令
./spark-submit 
--master yarn
 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100


或者

./spark-submit 
--master yarn–client
 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100


 或者

./spark-submit 
--master yarn 
--deploy-mode  client 
 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100


執行原理圖解【完美圖解】

執行流程
客戶端提交一個Application,在客戶端啓動一個Driver進程。
應用程序啓動後會向RS(ResourceManager)發送請求,啓動AM(ApplicationMaster)的資源。
RS收到請求,隨機選擇一臺NM(NodeManager)啓動AM。這裏的NM相當於Standalone中的Worker節點。
AM啓動後,會向RS請求一批container資源,用於啓動Executor.
RS會找到一批NM返回給AM,用於啓動Executor。
AM會向NM發送命令啓動Executor。
Executor啓動後,會反向註冊給Driver,Driver發送task到Executor,執行情況和結果返回給Driver端。

總結
Yarn-client模式同樣是適用於測試,因爲Driver運行在本地,Driver會與yarn集羣中的Executor進行大量的通信,會造成客戶機網卡流量的大量增加.

ApplicationMaster的作用:
爲當前的Application申請資源
給NameNode發送消息啓動Executor。
注意:ApplicationMaster有launchExecutor和申請資源的功能,並沒有作業調度的功能。

yarn-cluster提交任務方式
提交命令

./spark-submit 
--master yarn 
--deploy-mode cluster 
--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100


或者

./spark-submit 
--master yarn-cluster
--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar
100


執行原理圖解【完美圖解】

執行流程
客戶機提交Application應用程序,發送請求到RS(ResourceManager),請求啓動AM(ApplicationMaster)。
RS收到請求後隨機在一臺NM(NodeManager)上啓動AM(相當於Driver端)。
AM啓動,AM發送請求到RS,請求一批container用於啓動Executor。
RS返回一批NM節點給AM。
AM連接到NM,發送請求到NM啓動Executor。
Executor反向註冊到AM所在的節點的Driver。Driver發送task到Executor。

總結
Yarn-Cluster主要用於生產環境中,因爲Driver運行在Yarn集羣中某一臺nodeManager中,每次提交任務的Driver所在的機器都是隨機的,不會產生某一臺機器網卡流量激增的現象,缺點是任務提交後不能看到日誌。只能通過yarn(node:8042)查看日誌。

ApplicationMaster的作用:
爲當前的Application申請資源
給NameNode發送消息啓動Excutor。
任務調度。
停止集羣任務命令:yarn application -kill applicationID
 

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