spark資源調度模式的種類

1.資源調度模式

1.1 local模式(本地)

運行該模式非常簡單,只需要把Spark的安裝包解壓後,改一些常用的配置即可使用,而不用啓動Spark的Master、Worker守護進程( 只有採用集羣的Standalone方式時,才需要這兩個角色),也不用啓動Hadoop的各服務(除非要用到HDFS文件系統)。
Spark不一定非要跑在hadoop集羣,可以在本地,起多個線程的方式來指定。將Spark應用以多線程的方式直接運行在本地,一般都是爲了方便調試,本地單機模式分三類:
local: 只啓動一個executor
local[k]: 啓動k個executor
local[*]: 啓動跟cpu數目相同的 executor

1.2 standalone模式

即獨立模式, 自帶完整的服務,可單獨部署到一個集羣中,資源管理和任務監控是Spark自己監控,無需依賴任何其他資源管理系統。這個模式也是其他模式的基礎. 不使用其他調度工具時會存在單點故障,使用Zookeeper等可以解決

1.3 on-yarn模式

這是一種最有前景的部署模式。但限於YARN自身的發展,目前僅支持**粗粒度模式(**Coarse-grained Mode)。這是由於YARN上的Container資源是不可以動態伸縮的,一旦Container啓動之後,可使用的資源不能再發生變化,不過這個已經在YARN計劃中了。

應用場景:

考慮到儘量用一個統一的資源調度模式來運行多種任務,
這樣可以減輕運維的工作壓力,
同時也可以減少資源調度之間的配合(基於集羣考慮)

spark-on-yarn支持的兩種模式:
  1. 、yarn-cluster:Driver運行在 YARN集羣下的某臺機器上的JVM進程中,適用於生產環境;
  2. 、yarn-client:Driver 運行在當前提交程序的機器上,適用於交互、調試
    yarn-cluster和yarn-client的區別在於yarn appMaster,每個yarn app實例有一個appMaster進程,是爲app啓動的第一個container;負責從ResourceManager請求資源,獲取到資源後,告訴NodeManager爲其啓動container。在實際生產環境中一般都採用yarn-cluster;而如果你僅僅是Debug程序,可以選擇yarn-client。

1.4 mesos模式

這是很多公司採用的模式,官方推薦這種模式(當然,原因之一是血緣關係)。正是由於Spark開發之初就考慮到支持Mesos,因此,目前而言,Spark運行在Mesos上會比運行在YARN上更加靈活,更加自然。目前在Spark On Mesos環境中,用戶可選擇兩種調度模式之一運行自己的應用程序:

1)、 粗粒度模式(Coarse-grained Mode):每個應用程序的運行環境由一個Dirver和若干個Executor組成,其中,每個Executor佔用若干資源,內部可運行多個Task(對應多少個“slot”)。應用程序的各個任務正式運行之前,需要將運行環境中的資源全部申請好,即使不用, 運行過程中也要一直佔用這些資源,,最後程序運行結束後,回收這些資源。

2)、細粒度模式(Fine-grained Mode):鑑於粗粒度模式會造成大量資源浪費,Spark On Mesos還提供了另外一種調度模式:細粒度模式,這種模式類似於現在的雲計算,思想是按需分配。
與粗粒度模式一樣,應用程序啓動時,先會啓動executor,但每個executor佔用資源僅僅是自己運行所需的資源,不需要考慮將來要運行的任務,之後,mesos會爲每個executor動態分配資源,每分配一些,便可以運行一個新任務,單個Task運行完之後可以馬上釋放對應的資源。每個Task會彙報狀態給Mesos slave和Mesos Master,便於更加細粒度管理和容錯,這種調度模式類似於MapReduce調度模式,每個Task完全獨立,優點是便於資源控制和隔離,但缺點也很明顯,短作業運行延遲大。

1.5 docker

Docker是一種相比虛擬機更加輕量級的虛擬化解決方案,所以在Docker上搭建Spark集羣具有可行性。

1.6 cloud

2.這麼多資源調度模式,到底用哪種比較好?

需要通過公司需求和運行速度來綜合衡量

3.哪種調度模式速度快呢?

standalone模式

4.爲什麼又很多企業在用spark-on-yarn模式?

1.考慮到儘量用一個統一的資源調度模式來運行多種任務,
2.這樣可以減輕運維的工作壓力,
3.同時也可以減少資源調度之間的配合(基於集羣考慮)

5.yarn的任務調度流程

1、client向ResourceManager註冊並提交任務
2、ResourceManager向NodeManager進行通信,開始在某個NodeManager啓動AppMaster
3、AppMaster啓動後開始向ResourceManager申請資源
4、ApplicationManager開始資源調度,開始通知NodeManager啓動YarnChild
5、YarnChild開始和AppMaster進行通信,AppMaster對所有YarnChild進行監控
6、MR執行完成以後,YarnChild被AppMaster回收,AppMaster把自己回收掉

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