【问题标题】:Hadoop cluster - how to know the ideal maximum number of map/reduce tasks for each tasktrackerHadoop集群-如何知道每个tasktracker的理想最大map/reduce任务数
【发布时间】:2015-12-31 21:37:00
【问题描述】:

我刚刚使用 Hadoop 0.20.205 设置了一个 Hadoop 集群。我有一个主机(NameNode 和 JobTracker)和另外两个盒子(从机)。

我试图了解,如何定义要使用的 map 和 reduce 任务的数量。

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

另外,我可以定义整个集群可以与*mapred.map.tasks* 同时运行的最大地图任务数。对吗?

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

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    我不认为有一个规则(比如设置减速器数量的规则)。

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

    【讨论】:

    • 你说的reducer个数设置规则是这个? 0.95 或 1.75 * (nodes * mapred.tasktracker.tasks.maximum) 来自wiki.apache.org/hadoop/HowManyMapsAndReduces 如果是这样,只是为了确保我做对了。例如,如果我有 6 个节点,每个节点最多可以执行 2 个 reduce 任务,那么如果我使用 0.95,我应该将 reducer 的数量设置为 11,对吧?
    • 是的,这是正确的数字。使用 0.95 因子,所有 reduce 任务同时运行,但每个任务通常需要更长的时间。使用 1.75 因子,每个 reduce 任务完成得更快,但一些 reduce 任务在队列中等待执行。首选 1.75 因子以获得更好的负载平衡。直观地说,使用 0.95,当减速器完成时,机器什么也不做。在 1.75 中,当一个 reducer 完成得比其他的快时,它开始处理队列中等待的 reduce 任务。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多