Spark支持三種集群部署方式(Standalone,Mesos,Yarn),其中Master服務(Spark Standalone,Mesos Master,Yarn ResourceManager)決定哪些應用可以運行,在那個節點上運行,以及什么時候運行。Slave服務(Yarn NodeManager)運行在每個節點上,節點控制著Executor進程,同時監控作業的運行狀態以及資源的消耗。Spark運行在Yarn上,有兩種模式,Yarn-Client和Yarn-Cluster。通常情況下,Yarn-Cluster用于生產環境,Yarn-Client用于交互、調試。
1.Appliaction Master
在Yarn中,每個application都有一個Application Master進程,它是Appliaction啟動的第一個容器,它負責從ResourceManager中申請資源,分配資源,同時通知NodeManager來為Application啟動container,Application Master避免了需要一個活動的client來維持,啟動Applicatin的client可以隨時退出,而由Yarn管理的進程繼續在集群中運行。
當在Yarn下運行Spark作業時,每個Spark Executor作為一個Yarn 容器(container)在運行,同時支持多個任務在同一個容器中運行,節省了任務的啟動時間。
2.Yarn-client
在Yarn-client模式下,AM僅僅從Yarn中申請資源分配給Executor,之后client會跟容器(Container)通信進行作業調度。Client不能離開.如下圖所示:
執行流程:
- 客戶端提交作業給ResourceManager(RM)
- RM在本地NodeManager(NM)啟動container并將AM分配給該NM
- NM接收到RM的分配,啟動Application Master并初始化作業,此時這個NM就稱為Driver
- Application向RM申請資源,分配資源同時通知其他NodeManager啟動相應的Executor
- Executor向本地啟動的AM注冊匯報并完成相應的任務
3.Yarn-Cluster
在Yarn-cluster模式下,driver運行在AM上,AM進程同時負責驅動Application和從Yarn中申請資源,該進程運行在Yarn container內,所以啟動AM的client可以立即關閉而不必持續到Application的生命周期,如下圖所示:
執行流程:
- 客戶端生成作業信息提交給ResourceManager(RM)
- RM在某一個NodeManager(由Yarn決定)啟動container并將Application Master(AM)分配給該NodeManager(NM)
- NM接收到RM的分配,啟動Application Master并初始化作業,此時這個NM就稱為Driver
- Application向RM申請資源,分配資源同時通知其他NodeManager啟動相應的Executor
- Executor向NM上的Application Master注冊匯報并完成相應的任務