限制Hadoop流媒体上运行的映射程序的数量

限制Hadoop流媒体上运行的映射程序的数量,hadoop,hadoop-streaming,Hadoop,Hadoop Streaming,是否可以使用Hadoop流限制在任何给定时间为作业运行的映射程序的数量?例如,我有一个28节点的集群,每个节点可以运行一个任务。如果我有一个包含100个任务的作业,我希望在任何时间点只使用28个节点中的20个。我想限制一些作业,因为它们可能包含许多长时间运行的任务,有时我想运行一些运行更快的作业,并确保它们可以立即运行,而不是等待长时间运行的作业完成 我看到了这个问题,题目很贴切,但答案似乎并没有解决这个问题 谢谢 虽然我不知道“节点式”容量调度,但有一种为非常类似的情况构建的替代调度器:容量调

是否可以使用Hadoop流限制在任何给定时间为作业运行的映射程序的数量?例如,我有一个28节点的集群,每个节点可以运行一个任务。如果我有一个包含100个任务的作业,我希望在任何时间点只使用28个节点中的20个。我想限制一些作业,因为它们可能包含许多长时间运行的任务,有时我想运行一些运行更快的作业,并确保它们可以立即运行,而不是等待长时间运行的作业完成

我看到了这个问题,题目很贴切,但答案似乎并没有解决这个问题


谢谢

虽然我不知道“节点式”容量调度,但有一种为非常类似的情况构建的替代调度器:容量调度器


您应该为可能较长的作业定义特殊队列,为较短的作业定义队列,此计划程序将考虑为每个队列的作业始终提供一些容量。

如果每个映射器中的工作量很大,则以下选项可能有意义,因为此策略确实涉及在每次映射调用中读取多达20个计数器的开销


创建一组计数器并使groupname成为我的任务映射器。使关键点等于映射器,其中K是所需映射器的最大值。然后在映射程序中,遍历计数器,直到发现其中一个计数器为0。将机器的非虚线ip地址作为长值放在计数器中-有效地将一台机器分配给该映射器。如果所有的K都已被获取,则不做任何操作就退出映射程序。

谢谢!这看起来和我想要的非常接近,虽然比我希望的要复杂一些。我来看看它是否奏效。你也可以检查一下这个,它有点不同,但也要注意一个工作不会被另一个工作饿死: