【发布时间】:2013-08-27 09:24:28
【问题描述】:
Hadoop 如何决定否。减速器运行特定问题?它在什么基础上决定是否使用分区器。集群大小还是什么? 解释下面的问题 - 我有 640MB 的输入文件,我有 64MB 的块大小。我的集群大小是 5 节点集群。我已将输入文件写入 HDFS,它包含 10 个数据块。如果我为写入的输入文件运行我的 wordcount 程序,那么告诉我将运行多少个 Mapper 和多少个 Reducer。
【问题讨论】:
Hadoop 如何决定否。减速器运行特定问题?它在什么基础上决定是否使用分区器。集群大小还是什么? 解释下面的问题 - 我有 640MB 的输入文件,我有 64MB 的块大小。我的集群大小是 5 节点集群。我已将输入文件写入 HDFS,它包含 10 个数据块。如果我为写入的输入文件运行我的 wordcount 程序,那么告诉我将运行多少个 Mapper 和多少个 Reducer。
【问题讨论】:
映射的数量取决于 IputFormatClass 的选择。默认情况下,它是 TextInputFormat 类,它将创建与块数相同数量的地图。如果只有最后一条记录在两个块中被破坏(在这种情况下,映射数将是块数减一),则会出现异常。 number reducers 是一种配置选择,甚至可以在作业提交期间指定。默认情况下,reducer 的数量为 1。
【讨论】:
鉴于可以在 conf 文件中指定映射器和缩减器编号,因此没有唯一的答案。但默认为 :
640Mb 和 64Mb 块 = 10 个映射器
和1个减速机。
为了更准确的答案,映射器的数量根据File total size / File block size设置
但是你可以设置配置变量来改变它的行为,比如:
地图最小分割尺寸,地图最大分割尺寸,最小地图数量等...
如果您想了解更多关于这些变量的信息,请查看 mapred default hdfs default 和 core default
顺便说一句,关于堆栈上的 map 和 reduce 数量有很多问题。
【讨论】:
将块大小从 64 MB 更改为 128MB,将块数从 10 减少到 5 个。您可以在配置中仅指定减速器的数量,但无法通过参数控制减速器的数量。映射的数量取决于输入拆分的数量和输入格式。我建议减速器的数量少于您的集群大小。在 MapReduce 2 框架中,容器控制正在使用的资源,因此您可以根据数据估计来调整资源大小,并根据数据大小启动尽可能多的 reducer,并降低函数复杂度。
【讨论】: