0

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

我看到了这个问题,标题是正确的,但答案似乎并没有解决这个特定问题。

谢谢!

4

2 回答 2

1

虽然我不知道“节点级”容量调度,但有一个为非常相似的情况构建的替代调度程序:容量调度程序。

http://hadoop.apache.org/common/docs/r0.19.2/capacity_scheduler.html

您应该为可能的长作业定义特殊队列,为短作业定义队列,并且此调度程序将关心有一些容量始终可用于每个队列的作业。

于 2012-03-06T14:14:33.427 回答
0

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

创建一组计数器并将组名设为 MY_TASK_MAPPERS 。使键等于 MAPPER<1..K> 其中 K 是您想要的最大 #of 映射器。然后在 Mapper 中遍历计数器,直到发现其中一个为 0。将机器的未加点的 ip 地址作为长值放在计数器中 - 有效地将那台机器分配给该映射器。相反,如果所有 K 都已被占用,则只需退出映射器而不做任何事情。

于 2013-03-03T02:40:00.083 回答