Spark集群资源调度

来源:互联网 发布:unity3d小游戏制作视频 编辑:程序博客网 时间:2024/05/22 02:23

在学习和使用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不论提交顺序,都会被轮询执行。
0 0
原创粉丝点击