我正在尝试运行Fair Scheduler,但它并没有将Map任务分配给只运行一个作业的某些节点。我的理解是公平调度程序将使用conf
插槽限制,除非存在多个作业,此时公平性计算启动。我还尝试将所有队列设置为fair-scheduler.xml
中的FIFO,但是我得到相同的结果。
我已使用mapred-site.xml
参数在所有mapreduce.jobtracker.taskscheduler
个文件中设置调度程序(虽然我相信只有JobTracker需要它),并且一些节点在接收和运行Map任务时没有问题。但是,其他节点要么永远不会获得任何Map任务,要么获得一轮Map任务(即所有插槽都填充一次),然后再也不会再获得任何一个。
我尝试将此作为开发自己的LoadManager的先决条件,因此我继续将调试LoadManager放在一起。从日志消息中,我可以看到问题节点继续请求Map任务,并且他们的插槽是空的。但是,它们从未被分配过。
所有节点都与默认调度程序完美配合。当我启用Fair Scheduler时,我才开始遇到这个问题。
有什么想法吗?有人有这个工作,并采取了我错过的一步吗?
编辑:值得注意的是,Fair Scheduler Web UI页面指示正确的公平份额计数,但“运行”列总是更少。我正在使用默认的每用户池,一次只有1个用户和1个作业。
答案 0 :(得分:3)
原因是未记录的mapred.fairscheduler.locality.delay
参数。有问题的节点位于禁用HDFS的不同机架上,使这些节点上的所有任务都是非机架本地的。因此,由于公平调度程序的延迟调度算法导致了大量延迟,如here所述。