当前位置: 首页 > 知识库问答 >
问题:

Hadoop-reducer如何获取it数据?

刘和正
2023-03-14

我知道映射器为每个缩减器生成1个分区。reducer怎么知道要复制哪个分区?假设有2个节点运行字数统计程序的映射器,并且配置了2个缩减器。如果每个map节点产生2个分区,两个节点中的分区都可能包含相同的关键字,那么reducer将如何正确工作?

对于ex:

如果节点1产生分区1和分区2,并且分区1包含一个名为“WHO”的键。

如果节点2产生分区3和分区4,并且分区3包含名为“世卫组织”的键。

如果分区 1 和分区 4 转到化简器 1(其余归于化简器 2),则化简器 1 如何计算正确的字数?

如果这是不可能的,并且分区1和3将被设置为归约器1,那么Hadoop如何做到这一点?它是否确保来自不同节点的给定键值对始终转到同一个化简器?如果是这样,它是如何做到这一点的?

谢谢,苏雷什。

共有1个答案

裴楚青
2023-03-14

在您的情况下,因为分区1和分区3都有键“世卫组织”,所以可以保证这两个分区到同一个缩减器。

在hadoop中,tasktracker在任何时候的最大reduce任务数由< code > mapred . tasktracker . reduce . tasks . maximum 属性决定。< br > MapReduce作业的缩减器数量通过< code >-D mapred . reduce . tasks = n 设置

当有多个reducer时,映射任务将其输出进行分区,每个任务为每个reduce任务创建一个分区。每个分区中可以有许多键(及其关联值),但任何给定键的记录都在一个分区中。分区可以由用户定义的分区函数控制,但通常使用哈希函数存储键的默认分区器工作得很好。(Hadoop:权威指南)

因此,具有指定键的值将始终指向同一个reducer。

 类似资料:
  • 我只是使用3机器集群测试单词计数示例。我的代码与此示例相同,但以下代码除外:

  • 我在使用MapReduce作业时遇到了问题。我的函数确实运行并产生了所需的输出。但是,函数没有运行。该函数似乎从未被调用过。我使用Text作为键,Text作为值。但我不认为这会导致问题。 输入文件的格式如下: 我想将一行的第二个日期提取为<code>Text<code>并将其用作reduce的键。键的值将是同一行中最后两个<code>float<code>值的组合 即: 以便可以将值部分视为由空白

  • 我正在学习一些MapReduce,但是我遇到了一些问题,情况是这样的:我有两个文件:“users”包含一个用户列表,其中包含一些用户数据(性别、年龄、国家等)...)文件看起来像这样: “歌曲”包含所有用户收听的歌曲的数据(用户ID,收听日期和时间,艺术家ID,艺术家姓名,歌曲ID,歌曲标题): 目标是在某些国家找到k首最受欢迎的歌曲。k和输入中提供的国家列表。 我决定为映射器使用Multiple

  • 我决定创建自己的WritableComparable类来学习Hadoop如何使用它。因此,我创建了一个带有两个实例变量(orderNumber cliente)的Order类,并实现了所需的方法。我还为getters/setters/hashcode/equals/toString使用了Eclipse生成器。 相比较而言,我决定只使用orderNumber变量。 我创建了一个简单的MapReduc

  • 我对兽人档案不熟悉。我翻阅了很多博客,但没有得到清晰的理解。请帮助并澄清以下问题。 > 我可以从ORC文件获取架构吗?我知道在Avro,模式可以被提取。 是为每列维护的索引。如果是,那么它不会消耗更多的内存吗? 柱格式ORC文件如何适合配置单元表,每个列的值存储在一起。而配置单元表是一个记录一个记录地提取。两者如何结合在一起?

  • 减速器 自定义可写类