一、核心組件定義與關系拆解
1. ApplicationMaster(AM)
- 定義:YARN 框架中的應用管理器,每個應用程序(如 Spark 作業)對應一個 AM。
- 職責:
- 向 YARN 的 ResourceManager 申請資源(Container)。
- 管理分配到的 Container,啟動 Executor 進程。
- 監控任務執行狀態,處理失敗重試。
- 與其他組件關系:在 YARN 模式下,AM 是 Spark 與 YARN 的橋梁,不直接參與 Spark 作業邏輯(除了 yarn-cluster 模式下啟動 Driver)。
2. Driver
- 定義:Spark 應用的主控進程,是 Spark 作業的執行入口。
- 職責:
- 創建 SparkContext,解析用戶代碼(如 RDD 轉換)。
- 將作業分解為 Task,調度到 Executor 執行。
- 監控 Task 進度,收集結果,處理錯誤。
- 與其他組件關系:在 Standalone 和 YARN 模式中位置不同(見下文對比),是 Spark 作業的 “大腦”。
3. Executor
- 定義:運行 Spark 任務的工作進程,每個 Executor 負責執行多個 Task。
- 職責:
- 維護 Task 執行的線程池,執行 Driver 分配的 Task。
- 緩存 RDD 數據,供 Task 復用。
- 向 Driver 匯報任務狀態和結果。
- 與其他組件關系:依賴 Container 提供的資源運行,受 Driver 調度。
4. Container
- 定義:YARN 中的資源抽象單位,封裝 CPU、內存等資源。
- 職責:為應用程序組件(如 AM、Executor)提供運行環境。
- 與其他組件關系:AM 向 YARN 申請 Container 來啟動 Executor,Driver 和 Executor 在 Container 中運行(YARN 模式下)。
在 yarn-cluster 模式下:AM、Driver、Executor 各自占用獨立的 Container,且 Container 是物理隔離的資源單元(包含實際分配的內存、CPU 等資源),并非邏輯概念。每個 Container 對應一個真實運行的進程容器,由 YARN 的 ResourceManager 按物理資源標準分配。
其實上面這些概念AM,Container都是在Spark on Yarn集群模式下才有的,AM,Container這些概念是Hadoop中的,Spark通過Yarn分配資源,那就一定會存在,Spark Standalone沒有,因為它是不依賴于外部框架的,而是用自身提供的
二、Standalone 與 YARN 模式的架構對比
1. Standalone 模式(Spark 原生集群管理器)
- 架構圖:
- 核心關系:
- Driver:由客戶端啟動,直接與 Master(集群管理器)和 Worker(工作節點)交互。
- Executor:由 Worker 啟動,運行在 Worker 節點上,受 Driver 調度。
- 無 ApplicationMaster:Standalone 是 Spark 自研的資源管理框架,不依賴 YARN,因此沒有 AM 組件。
- 資源管理:Master 負責分配 Worker 節點的資源給 Driver,Driver 直接控制 Executor 的啟動。
?Standalone 模式為什么沒有 AM 和 Container?
- AM 的替代者:Standalone 模式中,Master 節點承擔資源調度角色(類似 YARN 的 ResourceManager),但沒有 AM 這個中間層。
- 資源分配單位差異:
- YARN 用 Container 封裝資源;Standalone 直接向 Worker 節點申請 Executor 進程(每個 Executor 對應 Worker 節點的一組 CPU / 內存)。
- 組件運行方式:
- Driver:由客戶端啟動,運行在客戶端或 Worker 節點(取決于
--deploy-mode
)。 - Executor:由 Worker 節點直接啟動,作為獨立進程運行(無 Container 封裝)。
- Driver:由客戶端啟動,運行在客戶端或 Worker 節點(取決于
Standalone 模式架構流程
Master(總調度)↓
Worker節點1↓
Driver(若deploy-mode=cluster)或Executor1↓
Worker節點2↓
Executor2、Executor3...
2. YARN 模式(Spark 運行在 YARN 集群上)
- 架構圖(以 yarn-cluster 為例):
- 核心關系:
- ApplicationMaster:作為 YARN 與 Spark 的中間層,向 ResourceManager 申請 Container 資源,啟動 Driver 和 Executor。
- Driver:
在 yarn-cluster 模式下由 AM 啟動,運行在 Container 中;
在 yarn-client 模式下由客戶端啟動,運行在客戶端機器。
- Executor:運行在 NodeManager 管理的 Container 中,受 Driver 調度。
- 資源管理:YARN 的 ResourceManager 統一管理集群資源,AM 作為應用代表申請資源,Driver 不直接與 ResourceManager 交互。
(1) yarn-cluster 模式:Container 是 “物理隔離的辦公間”
- Container 本質:YARN 分配的最小資源單元(內存 / CPU 等),是進程運行的物理容器(類似 Docker 容器)。
- 組件與 Container 的映射:
- AM:單獨占用 1 個 Container(由 ResourceManager 分配),負責啟動 Driver 和申請 Executor 資源。
- Driver:由 AM 在另一個 Container 中啟動(屬于 AM 的子任務)。
- Executor:每個 Executor 占用 1 個 Container,由 AM 向 ResourceManager 申請后啟動。
- 類比場景:
- ResourceManager 是 “房東”,負責分配房間(Container);
- AM 是 “租客代表”,租到第一個房間后,再替 Driver 和 Executor 租其他房間。
yarn-cluster 模式架構流程
ResourceManager(總房東)↓
AM(租客代表)[Container1]↓
Driver(項目經理)[Container2]↓
Executor1[Container3]、Executor2[Container4]...(工人)
(2) yarn-client 模式:Driver 跳出 Container 的 “例外”
- Container 的角色:
- AM 占用 1 個 Container(在集群內),僅負責申請 Executor 的 Container。
- 每個 Executor 占用 1 個 Container(在集群內)。
- Driver 的特殊性:
- Driver 在客戶端機器(非集群節點)直接運行,不依賴 Container(因為 YARN 無法管理客戶端資源)。
- 類比:AM 在集群內租房間給 Executor,但 Driver 在 “集群外的自家房子” 辦公,只通過網絡指揮集群內的 Executor。
yarn-client 模式架構流程
客戶端機器(本地)↓
Driver(項目經理)[非Container]↓
ResourceManager(總房東)↓
AM(租客代表)[Container1]↓
Executor1[Container2]、Executor2[Container3]...(工人)
涉及ResourceManager,NodeManager的,從略微更高的角度,去理解以上他們之間關系,請見文章
YARN與Spark組件架構關系及交互機制:從ResourceManager到Executor的層級、依賴與通信鏈路解析-CSDN博客
三、兩種模式下組件關系的類比理解
1. Standalone 模式:自營小團隊
- Master:團隊領導,分配任務給 Worker(員工)。
- Driver:項目經理,直接對接領導,安排具體工作(Task)給員工(Executor)。
- Executor:員工,在自己的工位(Worker 節點)上干活,聽項目經理指揮。
- 特點:Spark 自己管資源,簡單直接,但擴展性和資源隔離性較差。
2. YARN 模式:外包大公司
- YARN ResourceManager:大公司 CEO,掌管所有資源(Container)。
- ApplicationMaster:外包項目負責人,向 CEO 申請資源(Container),拿到資源后組建團隊。
- Driver:項目技術負責人,由外包負責人招聘(啟動),負責具體技術方案和任務分配。
- Executor:外包員工,在公司分配的工位(Container)上干活,聽技術負責人指揮。
- 特點:YARN 統一管資源,Spark 作為應用運行,適合多應用混部,資源利用率高。
四、關鍵差異總結表
對比維度 | Standalone 模式 | YARN 模式 |
---|---|---|
資源管理器 | Spark 自研的 Master-Worker 架構 | YARN 的 ResourceManager-NodeManager 架構 |
ApplicationMaster | 無,Driver 直接與 Master 交互 | 有,作為 Spark 應用與 YARN 的中間層 |
Driver 位置 | 由客戶端啟動,運行在客戶端或 Worker 節點 | yarn-client 在客戶端,yarn-cluster 在集群內 |
Executor 運行環境 | 直接運行在 Worker 節點上 | 運行在 YARN 的 Container 中(資源隔離性更好) |
適用場景 | 小規模集群,Spark 單一應用場景 | 大規模集群,多應用混部(如 Hadoop 生態) |
五、一句話理清組件關系
- Standalone:Driver(項目經理)直接找 Master(領導)要資源,分配給 Worker 上的 Executor(員工)干活。
- YARN:AM(外包負責人)先找 YARN CEO(ResourceManager)要 Container(工位),用 Container 啟動 Driver(技術負責人)和 Executor(員工),Driver 再指揮 Executor 干活。