Spark 的?運行模式(--master
)?和?部署方式(--deploy-mode
),兩者的核心區別在于?資源調度范圍?和?Driver 進程的位置。
一、核心概念對比
維度 | --master (運行模式) | --deploy-mode (部署方式) |
---|---|---|
作用 | 指定 Spark 應用在哪里運行(單機 / 集群 / 云平臺)。 | 指定 Driver 進程的運行位置(本地客戶端 / 集群節點)。 |
選項范圍 | - 單機:local ?/?local[N] ?/?local[*] - 集群: yarn ?/?spark://host:port ?/?mesos | 僅當?--master ?為?集群模式?時有效:-? client (客戶端部署)-? cluster (集群部署) |
是否必填 | 是(決定應用的運行環境)。 | 否(默認值:client ,僅在集群模式下需顯式指定)。 |
二、--master
?運行模式詳解
1. 單機模式(Local Mode)
適用場景:開發調試、本地測試(無需真實集群資源)。
local
:- 單線程運行,所有任務在一個線程中串行執行(無并行)。
- 示例:
--master local
local[N]
:- 使用?N 個線程?模擬集群中的 Executor,并行執行任務(N 通常為 CPU 核心數)。
- 示例:
--master local[2]
(2 個線程并行)。
local[*]
:- 使用?所有可用 CPU 核心?線程(自動獲取本地 CPU 核數)。
特點:
- 無需啟動集群服務,直接在本地 JVM 中運行。
- Driver 和 Executor 都在同一個進程內,適合驗證代碼邏輯。
2. 集群模式(Cluster Mode)
適用場景:生產環境(需調度真實集群資源)。
常見集群模式包括:
yarn
:運行在 Hadoop YARN 集群上(最常用的企業級方案)。spark://host:port
:運行在 Spark 自帶的獨立集群(Standalone Cluster)。mesos
:運行在 Mesos 集群上(較少用)。
特點:
- 需要提前啟動集群服務(如 YARN 的 ResourceManager、Spark Standalone 的 Master 節點)。
- 資源由集群統一管理,支持多應用并發運行。
三、--deploy-mode
?部署方式詳解(僅集群模式有效)
當?--master
?設置為集群模式(如?yarn
?或?spark://...
)時,需通過?--deploy-mode
?指定?Driver 進程的位置:
1. client 部署(默認)
- Driver 運行位置:提交任務的客戶端節點(如你本地的終端或服務器)。
????????????????????????????????????????Driver 進程運行在提交作業的客戶端機器上
- 適用場景:
- 交互式任務(如 Spark Shell)或需要實時查看日志的調試場景。
- Driver 需要與客戶端進行交互(例如接收用戶輸入)。
- 優缺點:
- 優點:日志直接輸出到客戶端,方便調試。
- 缺點:若客戶端斷開連接,任務會終止;Driver 占用客戶端資源。
示例(YARN 集群 + client 部署):
spark-submit --master yarn --deploy-mode client ...
2. cluster 部署
- Driver 運行位置:集群內部的某個節點(由集群調度分配)。
?????????????????????????????????????Driver 進程運行在集群的某個 Worker 節點上。
- 適用場景:生產環境的長時間運行任務(如定時批處理)。
- 優缺點:
- 優點:任務提交后客戶端可斷開連接,Driver 獨立運行在集群中,穩定性高。
- 缺點:日志需通過集群命令(如?
yarn logs
)查看,調試不如?client
?方便。
示例(YARN 集群 + cluster 部署):
spark-submit --master yarn --deploy-mode cluster ...
四、經典場景搭配
場景 | --master ?配置 | --deploy-mode ?配置 | 說明 |
---|---|---|---|
本地調試 | local[2] | 無需指定(單機模式不生效) | 使用 2 個線程模擬并行,直接在本地運行,日志打印到終端。 |
YARN 集群調試(需看日志) | yarn | client | Driver 運行在提交任務的客戶端(如服務器),日志實時輸出到終端。 |
YARN 集群生產任務 | yarn | cluster | Driver 運行在集群節點,任務提交后客戶端可斷開,適合無人值守任務。 |
Spark 獨立集群任務 | spark://master-host:7077 | cluster (推薦) | Driver 在集群內部,資源由 Spark Standalone 管理。 |
五、常見誤區
-
單機模式下無需?
--deploy-mode
:- 單機模式(
local
)中,Driver 和 Executor 都在本地,--deploy-mode
?無效,指定會報錯。
- 單機模式(
-
集群模式必須選?
deploy-mode
:- 若?
--master
?是?yarn
?或?spark://...
,必須顯式指定?--deploy-mode client
?或?cluster
(默認是?client
,但生產環境建議顯式寫?cluster
)。
- 若?
-
local
?不是集群:local
?模式是?偽分布式(模擬集群行為),實際沒有真正的集群節點,僅用于開發測試。
總結記憶法
--master
?決定 “在哪跑”:選本地(local
)或集群(yarn
/spark://...
)。--deploy-mode
?決定 “Driver 在哪”:集群模式下,選客戶端(client
)或集群內(cluster
)。- 開發調試用?
local
?或?yarn client
,生產任務用?yarn cluster
?或?spark://... cluster
。