是否可以使用Hadoop Streaming限制在任何给定时间为作业运行的映射器数量?例如,我有一个28节点集群,每个节点可以运行1个任务。如果我有100个任务的工作,我想在任何时间点只使用28个节点中的20个。我想限制一些工作,因为它们可能包含许多长时间运行的任务,我有时希望运行一些运行速度更快的工作并确保它们可以立即运行,而不是等待长时间运行的工作完成。
我看到了this问题并且标题很明显,但答案似乎没有解决这一特定问题。
谢谢!
答案 0 :(得分:1)
虽然我不知道“节点式”容量调度,但是为非常类似的情况构建了替代调度程序:Capacity Scheduler。
http://hadoop.apache.org/common/docs/r0.19.2/capacity_scheduler.html
您应该为可能很长的作业定义特殊队列,并为短作业排队,并且此调度程序将为每个队列的作业提供一些始终可用的容量。
答案 1 :(得分:0)
如果每个映射器中的工作量很大,则以下选项可能有意义,因为此策略确实涉及在每次映射调用中读取多达20个计数器的开销。
创建一组计数器并将组名称设为MY_TASK_MAPPERS。使密钥等于MAPPER< 1..K>其中K是你想要的最大#of映射器。然后在Mapper中迭代计数器,直到找到其中一个为0.将机器的非点划线ip地址作为一个长值放在计数器中 - 有效地将一台机器分配给该映射器。如果已经采用了所有K,那么只需退出映射器而不做任何事情。