hadoop - 为什么要在 MapReduce 框架中使用两个(或更多)reducer?

标签 hadoop mapreduce

例如,假设您要统计一个巨大的名称文件中包含的名称。您可以轻松地将文件分成多个 block ,将其发送到您的映射器,映射器输出到单个 reducer,后者又将输出一个包含结果列表的文件。听起来不错!

现在两个(或更多)reducer 如何帮助这个过程变得更快?据我所知,所有映射器都会向每个 reducer 发送自己的数据,以便对其进行缩减,并且每个 reducer 都将输出自己的文件及其结果。因此,在一项工作中——例如使用 2 个 reducer ——系统内传输的数据将乘以 reducer 的数量,并且所有 reducer 的输出将完全相同(希望如此)。对于某些其他实例来说,拥有多个 reducer 是否值得?

好像我遗漏了什么,我真的很感激关于这个主题的简短解释或指导。感谢您的宝贵时间。

最佳答案

您对 MapReduce 的工作方式感到困惑。我将尝试遵循您提供的相同示例,以便有一个小的解释来澄清您的疑问。

拥有 2 个或更多 reducer 背后的想法是因为您不想崩溃一台向其发送所有信息的机器。因此,如果您最初向一个 reducer 发送 10 条记录,现在如果您有 2 个 reducer,则该过程将每个发送 5 条记录(最好的情况,这取决于您的哈希函数)。每个 reducer 都将获得自己的数据份额。

按照您提供的相同示例,假设您正在使用组合器,以便映射器发送元组,例如(我知道我们可以使用组合器,这只是一个示例):

(约瑟夫,1) (乔治,1 岁) (安德鲁,1) (约瑟夫,1) (乔治,1 岁) (安德鲁,1) (阿尼巴尔,1) (玛丽,1 岁,) (安德鲁,1) (迈克尔,1)

如果你使用 1Reducer,所有这些记录将被发送到同一个 reducer,所以单个输出将是:

> 10

如果您使用 2Reducers,在最好的情况下,每个 reducer 都会获得自己的数据份额,例如:

Reducer1
(Joseph, 1)
(Joseph, 1)
(Andrew, 1)
(Andrew, 1)
(Andrew, 1)

Reducer2
(George, 1,)
(George, 1,)
(Anibal, 1)
(Mary, 1,)
(Michael, 1)

对于这种情况,您将获得 2 个输出,它们是:

> 5 
> 5

请注意,我假设 key 将是找到的 name 并且您想要的输出只是计算文件中名称的数量。

关于hadoop - 为什么要在 MapReduce 框架中使用两个(或更多)reducer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42567779/

相关文章:

hadoop - DBVisualizer Hive SSH隧道忽略服务器信息

java - 使用 hadoop 自定义字数统计

java - 使用Map reduce查找最低编号

shell - 发送带有日志文件附件的电子邮件

hadoop - 在Hive SQL中使用over和rank关键字的目的是什么?

hadoop - 将 MapReduce Counter 值设置为某个值

hadoop - 如何在MapReduce中从Mapper跳过当前正在处理的文件

java - Hadoop MapReduce 中 Map/Combine 之后和 Reduce 阶段之前的数据保存在哪里?

apache - 使用HBase运行Hadoop:org.apache.hadoop.hbase.client.HTable。<init>(Lorg/apache/hadoop/conf/Configuration; Ljava/lang/String

hadoop - 如何使用Oozie-coordinator.xml中的jceks文件路径设置set hadoop.security.credential.provider.path