Spark 集群的模式及提交任務的方式
- 本文大致的內容圖
-
Spark 集群的兩種模式:
-
Standalone 模式
-
Standalone-client 任務提交方式
-
提交命令
./spark-submit --master spark://node1:7077 (主節點的位置) --class 類的包+類名 jar包的位置 1000 # 分區參數, 也可以說是並行度
||
./spark-submit --master spark://node1:7077 --deploy-mode client --class 類的包+類名 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 包+類名 jar包的位置 100 # 分區參數, 也可以說是並行度 #注意:Standalone-cluster提交方式,應用程序使用的所有jar包和文件,必須保證所有的worker節點都要有,因為此種方式,spark不會自動上傳包。 # 解決方式: # 1.將所有的依賴包和文件打到同一個包中,然后放在hdfs上。 # 2.將所有的依賴包和文件各放一份在worker節點上。
-
執行原理
-
執行流程
- cluster模式提交應用程序后會先向 Master 請求啟動 Driver
- Master 接收請求, 隨機在集中的一台節點啟動Driver進程
- Driver啟動后為當前的應用程序申請資源
- Driver端發送task到worker節點上執行
- worker 將執行情況和執行結果返回 Driver
-
總結
- Standalone-cluster 運行方式適用於生產環境
- 此時在driver端界面看不到執行任務情況
- 由於driver會被隨機分配到worker節點上啟動, 那么不會有流量激增問題
-
-
-
On Yarn 模式
-
Yarn-client 任務提交方式
-
提交命令
./spark-submit --master yarn --class 包+類名 jar文件位置 100
||
./spark-submit --master yarn–client --class 包+類名 jar文件位置 100
||
./spark-submit --master yarn --deploy-mode client --class 包+類名 jar文件位置 100
-
執行原理
-
執行流程
- 客戶端提交一個 Application, 在客戶端啟動一盒Driver 進程。
- 應用程序啟動后會向RM(ResourceManager) 發送請求, 啟動AM(ApplicationMaster)
- RM 收到請求, 隨機選擇一台 NM(NodeManager)啟動AM。這里的NM相當於Standalone中的Worker節點
- AM 啟動后, 會向 RS 請求一批container資源, 用於啟動Executor
- RM會找到一批NM返回給AM, 用於啟動Executor
- AM會向NM發送命令啟動Executor
- Executor 啟動后, 會反向注冊給Driver, Driver 發送 task 到 Executor, 執行情況和結果返回給Driver端
-
總結
-
Yarn-client模式同樣適用於測試, 因為Driver運行在本地, Driver會與yarn集群中的Executor 進行大量的通信, 會造成客戶機網卡流量的大量增加
-
ApplicationMaster 的作用:
-
為當前的Application申請資源
-
給NodeManager發送消息啟動Executor
-
-
-
-
Yarn-cluster 任務提交方式
-
提交命令
./spark-submit --master yarn --deploy-mode cluster --class 包+類名 jar文件位置 100
||
/spark-submit --master yarn-cluster --class 包+類名 jar文件位置 100
-
執行原理
-
執行流程
- 客戶機提交Application應用程序, 發送請求到RM(ResourceManager), 請求啟動(ApplicationMaster)
- RM收到請求后隨即在一台 NM(NodeManager) 上啟動 AM(相當於Driver 端)
- AM啟動后, AM 發送請求到 RM, 申請一批容器(container)來啟動Executor
- RM 返回一批 NM 節點 給 AM
- AM 連接到 NM, 發送請求到 NM 啟動 Executor
- Executor 反向注冊到 AM 所在節點的 Driver,Driver再發送task到Executor
-
總結
- Yarn-Cluster 主要用於生產環境中, 因為 Driver運行在 Yarn 集群中某一台NodeManager中, 每次提交任務的 Driver 所在機器都是隨機的, 並不會產生一台機器網卡流量激增的現象。
- 缺點是提交任務不能看到日志, 只能通過yarn查看日志
- ApplicationMaster的作用
- 為當前的 Application 申請資源
- 給NodeManger 發送消息啟動 Executor
- 任務調度
-
-
-