【问题标题】:How does Hadoop decides the no. of reducers runs for given scenario?Hadoop如何决定否。减速器在给定场景下运行?
【发布时间】:2013-08-27 09:24:28
【问题描述】:

Hadoop 如何决定否。减速器运行特定问题?它在什么基础上决定是否使用分区器。集群大小还是什么? 解释下面的问题 - 我有 640MB 的输入文件,我有 64MB 的块大小。我的集群大小是 5 节点集群。我已将输入文件写入 HDFS,它包含 10 个数据块。如果我为写入的输入文件运行我的 wordcount 程序,那么告诉我将运行多少个 Mapper 和多少个 Reducer。

【问题讨论】:

标签: hadoop mapreduce


【解决方案1】:

映射的数量取决于 IputFormatClass 的选择。默认情况下,它是 TextInputFormat 类,它将创建与块数相同数量的地图。如果只有最后一条记录在两个块中被破坏(在这种情况下,映射数将是块数减一),则会出现异常。 number reducers 是一种配置选择,甚至可以在作业提交期间指定。默认情况下,reducer 的数量为 1。

【讨论】:

  • 注意映射器的数量 - 文件不使用不可分割的压缩算法(例如 gzip)进行压缩
【解决方案2】:

鉴于可以在 conf 文件中指定映射器和缩减器编号,因此没有唯一的答案。但默认为 :
640Mb 和 64Mb 块 = 10 个映射器 和1个减速机。

为了更准确的答案,映射器的数量根据
File total size / File block size设置 但是你可以设置配置变量来改变它的行为,比如:
地图最小分割尺寸,地图最大分割尺寸,最小地图数量等... 如果您想了解更多关于这些变量的信息,请查看 mapred default hdfs defaultcore default 顺便说一句,关于堆栈上的 map 和 reduce 数量有很多问题。

【讨论】:

  • 谢谢布鲁日。你说只有1个reducer,如果我在我的配置文件中指定reducer的数量为10个reducer,那么Hadoop会保证我使用10个reducer吗?由于我的集群大小很小?
  • 现在来到 Mappers,我知道 Mappers 将基于 InputFormat 和 Inputsplit 工作。假设我的块大小是 64MB,我可以将输入拆分大小修改为 64KB 或 128MB 吗?在这种情况下,将运行多少个映射器?我们需要在这里输入什么?这个问题可能看起来很简单,我很困惑。请澄清。
  • 在 reduce 阶段,您会根据唯一的 map 输出键获得一个 reduce 任务。一个reducer 运行reduce 任务,所以如果有足够10 个reducer 的任务全部运行。您的硬件显然会影响算法的性能。很明显,reducer/node 的数量应该小于或等于 cores/node 的数量。
【解决方案3】:

将块大小从 64 MB 更改为 128MB,将块数从 10 减少到 5 个。您可以在配置中仅指定减速器的数量,但无法通过参数控制减速器的数量。映射的数量取决于输入拆分的数量和输入格式。我建议减速器的数量少于您的集群大小。在 MapReduce 2 框架中,容器控制正在使用的资源,因此您可以根据数据估计来调整资源大小,并根据数据大小启动尽可能多的 reducer,并降低函数复杂度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2015-06-17
    • 2016-12-11
    • 2021-12-06
    • 2014-03-22
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多