Spark作業運行流程

Spark有3種運行模式,包括Standalone,YARN和Mesos,其中,Mesos和YARN模式類似。目前用得比較多的是Standalone模式和YARN模式

  • Standalone運行模式

Standalone模式是Spark實現的資源調度框架,其主要的節點有Client節點、Master節點和Worker節點。Driver既可以運行在Master節點上,也可以運行在本地Client端。當用spark-shell交互式工具提交spark的Job時,Driver在Master節點上運行。當使用spark-submit工具提交Job或者在Eclipse、IDEA等開發平臺上使用“new SparkConf().setMaster(spark://master:7077)"方式運行Spark任務時,Driver是運行在本地Client端上的。

當用spark-shell交互式工具提交Spark的Job時,使用spark-shell啓動腳本。該腳本啓動一個交互式的Scala命令界面,可供用戶來運行Spark相關命令。在Spark的安裝目錄下啓動spark-shell,啓動命令如下所示:

在spark-shell的啓動過程中可以看到如下的信息,從中可以看到Spark的版本爲2.1.0,spark內嵌的Scala版本爲2.11.8,Java的版本爲1.8.同時spark-shell在啓動的過程中會初始化SparkContext爲sc,以及初始化SQLContext爲sqlContext。界面出現”scala>"這樣的提示符,說明Spark交互式命令窗口啓動成功,如圖所示。用戶可在該窗口下編寫Spark相關代碼,

spark-shell啓動的時候也可以手動指定每個節點的內存和Executor使用的cpu個數,啓動命令如下所示:

 

當以Standalone模式向spark集羣提交作業時,作業的運行流程如下圖所示:

(1)首先,SparkContext連接到Master,向Master註冊並申請資源。

(2)Worker定期發送心跳信息給Master並報告Executor狀態。

(3)Master根據SparkContext的資源申請要求和Worker心跳週期內報告的信息決定在哪個Worker上分配資源,然後在該Worker上獲取資源,啓動StandaloneExecutorBackend。

(4)StandaloneExecutorBackend向SparkContext註冊。

(5)SparkContext將Application代碼發送給StandaloneExecutorBackend,並且SparkContext解析Application代碼,構建DAG圖,並提交DAG Scheduler,分解成Stage(當碰到Action操作時),就會催生Job,每個Job中含有一個或多個Stage),然後分配到相應的Worker,最後提交給StandaloneExecutorBackend執行。

(6)StandaloneExecutorBackend會建立Executor線程池,開始執行Task,並向SparkContext報告,直至Task完成。

(7)所有Task完成後,SparkContext向Master註銷,釋放資源。

  •  YARN模式

YARN模式根據Driver在集羣中的位置分爲兩種,一種是YARN-Client模式(客戶端模式),另一種是YARN-Cluster模式(集羣模式)。

在YARN模式中,不需要啓動Spark獨立集羣,所以這個時候去訪問http://master:8080是訪問不了的。啓動YARN客戶端模式的Spark Shell命令如下所示:

在集羣模式下,Driver運行在Application Master上,Application Master進程同時負責驅動Application和從YARN中申請資源。該進程運行在YARN Container內,所以啓動Application Master的Client可以立即關閉,而不必持續到Application的聲明週期。

作業流程如下所示:

 

(1)客戶端生成作業信息提交給ResourceManager。

(2)ResourceManager在某一個NodeManager(由YARN決定)啓動Container,並將Application Master 分配給該NodeManager。

(3)NodeManager接收到ResourceManager的分配,啓動Application Master並初始化作業,此時NodeManager就稱爲Driver。

(4)Application向ResourceManager申請資源,ResourceManager分配資源的同時通知其他NodeManager啓動相應的Executor。

(5)Executor向NodeManager上的Application Master註冊彙報並完成相應的任務。

如下圖是YARN客戶端模式的作業運行流程。Application Master僅僅從YARN中申請資源給Executpr。之後Client會與Container通信進行作業調度

 

 

YARN模式的作業運行調度描述如下

(1)客戶端生成作業信息提交給ResourceManager

(2)ResourceManager在本地NodeManager啓動Container,並將Application Master分配給該NodeManager。

(3)NodeManager接收到ResourceManager的分配,啓動Application Master並初始化作業,此時這個NodeManager就稱爲Driver。

(4)Application向ResourceManager申請資源,ResouceManager分配資源同時通知其他NodeManager啓動相應的Executor。

(5)Executor向本地啓動的Application Master註冊彙報並完成相應的任務。

YARN-Cluster和YARN-Client區別

在YARN-Cluster模式下,SparkDriver運行在Application Master(AM)中,它負責向YARN申請資源,並監督作業的運行狀況。當用戶提交了作業之後,就可以關掉Client,作業會繼續在YARN上運行,所以YARN-Cluster模式不適合運行交互類型的作業。然而在YARN-Client模式下,AM僅僅向YARN請求Executor,Client會與請求得到的Container通信來調度它們的工作,也就是是Client不能離開。

總結來說,集羣模式的Spark Driver運行在AM中,而客戶端模式的Spark Driver運行在客戶端。所以,YARN-Cluster適用於生產,而YARN-Client適用於交互和調試,也就是希望快速地看到應用的輸出信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章