Hadoop集群 - 如何知道每个任务跟踪器的理想最大映射/减少任务数

时间:2013-12-03 01:16:53

标签: hadoop mapreduce

我刚刚使用Hadoop 0.20.205建立了一个Hadoop集群。我有一个主人(NameNode和JobTracker)和另外两个盒子(奴隶)。

我试图了解如何定义地图数量和减少要使用的任务。

到目前为止,我了解到我可以设置每个TaskTracker能够同时处理的地图和减少任务的最大数量:*mapred.tasktracker.map.tasks.maximum**mapred.tasktracker.reduce.tasks.maximum*

此外,我可以定义整个群集可以与*mapred.map.tasks*同时运行的最大映射任务数。是吗?

如果是这样,我怎么知道*mapred.tasktracker.map.tasks.maximum*的值应该是多少?我看到默认值是2.但为什么呢?增加或减少这个值的利弊是什么?

2 个答案:

答案 0 :(得分:0)

我认为没有规则(就像设置减速器数量的规则一样)。

我所做的是,将映射器和缩减器的数量设置为每个机器可用的核心数量减去1。直观地说,这将为每台机器留下一些内存用于其他进程(如集群通信)。但我可能错了。无论如何,这是我从“Pro Hadoop”找到的唯一的东西。它建议使用与可用内核数量和一个或两个减速器一样多的映射器。 我希望它有所帮助。

答案 1 :(得分:0)

这是我的建议。希望它有所帮助!

  • 运行" hadoop fsck /"在主节点中找出块的大小和数量。例如:

    ...
    Total size: 21600037259 B
    Total dirs: 78
    Total files:    152
    Total blocks (validated):   334 (avg. block size 64670770 B)
    ...
    
  • 我将减少任务设置为num_of_blocks / 10
    设置mapred.map.tasks=33;

  • 我将地图任务设置为block_size (in MB) * 2
    set mapred.reduce.tasks=124;

到目前为止,这是我发现的最佳配置。而且您必须根据群集的配置对其进行修改。