spark執行模式 standlone mesos yarn
不同的執行模式的主要區別就是他們有自己特定的資源分配和任務排程模組,這些模組用來執行實際的計算任務。
常用spark-submit提交spark application 格式如下
submit可選引數如下:
standalone模式:資源排程是spark框架自己實現,節點分為master和worker節點
如果是執行spark-shell等互動式的執行spark任務,那麼driver執行在master節點,如果使用spark-submit工具進行任務提交或者在eclipse idea開發平臺上使用new SparkContext("spark://master:7077","appname")方式,driver執行在本地客戶端
Worker節點通過ExecutorRunner控制執行在當前節點的CoarseGainedexecuatorBackend(粗粒度執行器後臺),每個CoarseGainedexecuatorBackend程序包含一個Executor物件,該物件持有一個執行緒池,每個執行緒執行一個task
standlone是master-slaves架構的叢集模式,存在master單點故障問題,解決方式:1基於檔案系統 master程序掛掉後直接重啟
2 基於zookeeper的HA方式 activemaster掛掉後standby接替
Spark appliction執行的主要流程(spark-submit模式):
1 客戶端啟動,初始化相關的環境變數,包括提交的application程式碼的提交
2 反射呼叫org.apache.spark.deploy.yarn.Client,建立DriverActor(其他方式提交,Driver可能執行在Worker節點中)
3 向Master註冊Driver
4 Driver初始化SparkContext DAGScheduler TaskScheduler等
5 DAGScheduler 向Master 註冊 application,master接收請求後,根據資源情況向worker傳送指令啟動executor,,executor啟動後向driver註冊
6 DAGScheduler進行Job的Stage劃分
7 DAGScheduler提交作業給TaskScheduler
8 TaskScheduler 向註冊的Executor傳送Launch Task命令
9 Executor端進行Task相關資訊的反序列化,相關jar包的下載和配置檔案的下載,並執行。
10 如果執行的shuffleMapTask,將結果儲存到本地檔案中,彙報給Driver等待ResultTask或者其他ShuffleMapTask獲取
11 ResultTask根據Driver中提供的資訊進行結果的獲取和reduce,最後結果彙報給Driver。
12 執行結束
standalone on mesos,yarn在很多細節上有相同和相似之處。
Yarn-Cluster模式
將spark application部署到yarn中,有以下優點:1 部署application和服務更加方便 spark經由客戶端提交後,由yarn提供的分散式快取機制分發到各個計算節點上 2 資源隔離 yarn只負責資源的管理和排程 3資源彈性管理 可以通過佇列管理聽同時執行在yarn叢集中的各個服務,並根據不同型別應用程式的壓力,調整對應的資源使用。
yarn-cluster:客戶端通過yarn client的api,把spark driver作為一個applicationMaster在yarn叢集中先啟動,然後再由ApllicationMaster 向resourceManager申請資源,進一步來啟動executor以執行Task。
部署的時候僅需要可以提交給spark application到yarn叢集的一個節點(一臺客戶端)即可,不用每臺都部署spark。在客戶端配置檔案中需要設定yarn和HDFS的相關屬性,spark本身的worker節點 master節點不需要啟動。
spark application提交步驟: 1客戶端向yarn提交spark application,提交的工具可以是spark-submit等。 2 ResourceManager接收到請求後,為application分配第一個container,用來執行applicationmaster,applicationmaster包含sparkcontext的初始化。
3 applicationmaster向resourcemanager申請資源以執行executor。 4 resourcemanager分配container給applicationmaster,application master和相關的nodemanager通訊,在獲得的container上啟動coarsegainedexecutorBackend,coarsegainedexecutorBackend啟動後開始向application master中的sparkcontext註冊並申請task
5 applicationmaster中的sparkcontext分配給task給coarseGrainedExecutorBackend執行,coarseGrainedExecutorBackend執行task並向spark context彙報執行情況
yarn-client模式
driver執行在客戶端本地
提交步驟:1 客戶端向yarn提交spark application 2 resourcemanager接收到請求後為application分配第一個container用來執行applicationmaster,這裡的applicationmaster指的是executorlauncher,他不包括driver,只負責啟動executor和客戶端的driver進行通訊 3 executorlauncher向resoucemanager申請資源以執行executor。 4 resourcemanager分配container給executorlanucher,executor和相關的nodemanager進行通訊,在獲得的container上啟動CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend向客戶端的driver中的sparkcontext註冊並申請task
5 執行在客戶端的sparkcontext分配task給coarsegrainedexecutor-backend執行,並彙報執行情況
此部落格參考了《大資料Spark企業級實戰版》大家可以購買此書 強力推薦