我想了解Spark的FAIR调度模式的内部。事实是,根据官方的Spark文档,它似乎并不像人们期望的那样公平:
从Spark 0.8开始,还可以配置作业之间的公平共享。在公平共享下,Spark以“循环”方式在作业之间分配任务,以便所有作业都获得大致相等的群集资源份额。这意味着在运行长作业时提交的短作业可以立即开始接收资源,并且仍然获得良好的响应时间,而无需等待长作业完成。此模式最适合多用户设置。
似乎工作没有得到平等的处理,实际上按照fifo的顺序进行管理。
要提供有关该主题的更多信息:
我在YARN上使用Spark。我使用Spark的Java API。要启用公平模式,代码为:
SparkConf conf = new SparkConf();
conf.set("spark.scheduler.mode", "FAIR");
conf.setMaster("yarn-client").setAppName("MySparkApp");
JavaSparkContext sc = new JavaSparkContext(conf);
我错过了什么?
这似乎是你没有设置池和所有的工作最终在一个单一default
的描述池配置池属性:
特定池的属性也可以通过配置文件进行修改。
然后
conf / fairscheduler.xml.template中也提供了完整的示例。请注意,任何未在XML文件中配置的池都将简单地获得所有设置(调度模式FIFO,权重1和minShare 0)的默认值。
它可以同时是你没有设置本地属性设置池中使用。根据上述给定的任务(一个或多个)公平调度池:
没有任何干预,新提交的作业将进入默认池,但是可以通过在提交线程的SparkContext中将spark.scheduler.pool“本地属性”添加到SparkContext中来设置作业的池。
最终,这意味着您可以使用单个default
FIFO池,因此与没有池的FIFO相比,处于FIFO模式的一个池不会发生任何变化。
只有您知道真正的答案:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句