如何启用Fair调度程序?

Tho*_*033 9 apache-spark

我想了解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);
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Jac*_*ski 8

似乎是你没有设置池和所有的工作在一个单一的最终default游泳池中的说明配置池属性:

还可以通过配置文件修改特定池的属性.

然后

conf/fairscheduler.xml.template中也提供了完整的示例.请注意,未在XML文件中配置的任何池将只获取所有设置的默认值(调度模式FIFO,权重1和minShare 0).

它可以同时是你没有设置本地属性来设置池使用.根据上述给定的任务(一个或多个)公平调度池:

在没有任何干预的情况下,新提交的作业将进入默认池,但可以通过将spark.scheduler.pool"local property"添加到提交它们的线程中的SparkContext来设置作业池.

它最终意味着您使用单个defaultFIFO池,因此FIFO模式下的一个池与没有池的FIFO相比没有任何变化.

只有你才能知道真正的答案:)

  • @MaatDeamon 您可以将 --conf spark.scheduler.mode=FAIR --conf spark.scheduler.allocation.file=/path/to/fair.xml 传递给您的 spark shell。在您的文件中,为池“默认”指定 scheduleMode FAIR。您将能够在 Stages UI 选项卡上看到您拥有 FAIR 调度的默认池。但是,这很重要,在没有其他池的情况下,您将获得与使用 FIFO 模式相同的效果,除非在您的 shell 中从不同线程生成作业。在此处查看我的详细答案 /sf/answers/3814227581/ (4认同)