Spark集羣資源調度


在學習和使用Spark過程中,簡單瞭解下Spark如何在不同計算間分配資源,總的來說可以分爲如下兩個角度去分析(請路過高手指正):

1> 每個Spark應用被分配到獨立的進程(Executor)集上,Cluster Manager負責在不同的Spark應用間調度資源。
2> 對於每個Spark應用的進程集內(一個SparkContext實例內),Spark通過 Fair Scheduler來調度資源。

針對1>,

        最簡單的是靜態分配資源;基於集羣模式的不同,分配策略稍有區別:

        
Standalone:
---  提交的應用遵循FIFO順序執行(每個應用默認試圖使用所有可能的結點--slave nodes)
---  應用程序中可以限制可使用的Slave node數目(通過spark.cores.max或 spark.deploy.defaultCores)
---  應用程序也可以限制每個executor的內存使用(spark.executor.memory)

YARN:
---  可限制Spark應用的executor數目(--num-executor)
---  可限制每個executor可使用的CPU及內存資源 (--executor-cores 和 --executor-memory)

Mesos:
---  指定使用粗粒度模型 (spark.mesos.coarse設爲true,表示資源靜態分配)
           -- 限制每個應用可使用的最大CPU資源 (spare.cores.max)
           -- 限制每個executor的memory使用  (spark.executor.memory)
---  也可指定細粒度模型,但僅針對CPU Cores(動態分配CPU資源,當應用不忙時可暫時釋放CPU給其他應用。Memory仍然靜態分配)

        動態調度資源目前在YARN上支持,默認是disable的;未來版本會在standalone上支持。(暫時不詳細介紹該部分)

針對2>--Spark應用內的資源調度:


---  默認模式是FIFO,先被執行的Job可使用所有資源,如果先執行的Job通過資源限制並不使用所有資源,則後續的Job也可以開始運行;
---  Spark應用中可以通過代碼設置採用Fair Scheduler, 簡單講這就是一種round robin模式,Job不論提交順序,都會被輪詢執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章