目前我正在使用默认的Yarn调度程序,但希望执行类似 -
的操作Run Yarn using the default scheduler
If (number of jobs in queue > X) {
Change the Yarn scheduler to FIFO
}
这是否可以通过代码实现?
请注意,我在一个名为RM的aws EMR集群上运行Spark作业。
答案 0 :(得分:1)
嗯,可以让轮询器检查当前队列(使用RM API)并更新yarn-site.xml +可能的RM重启。但是,重新启动RM可能会影响您的队列,因为当前作业将被终止或关闭(可能稍后重试)。
如果您需要在容量和FIFO调度程序之间进行更有效的切换,您可能还需要扩展这些类并设计自己的调度程序,它可以完成伪代码的工作。
默认情况下,EMR使用带有DefaultResourceCalculator的容量调度程序,并在默认队列上旋转作业。例如,EMR在如下路径上具有纱线配置:
/home/hadoop/.versions/2.4.0-amzn-6/etc/hadoop/yarn-site.xml
<property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value></property>
with
/home/hadoop/.versions/2.4.0-amzn-6/etc/hadoop/capacity-scheduler.xml
org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator