hadoop+;每个减速器都有一把钥匙
Hadoop中有没有办法确保每个reducer只获得一个映射器输出的键?通过实现分区器接口,您可以控制哪些键被发送到哪些reducer 从Hadoop API文档: 分区器控制分区 中间层的键的 映射输出。键(或其子集) 键)用于导出 分区,通常通过散列 功能。总数 分区与编号相同 减少作业的任务。因此 这将控制m中的哪一个减少 将任务分配给中间键(因此 记录)已发送以进行还原hadoop+;每个减速器都有一把钥匙,hadoop,Hadoop,Hadoop中有没有办法确保每个reducer只获得一个映射器输出的键?通过实现分区器接口,您可以控制哪些键被发送到哪些reducer 从Hadoop API文档: 分区器控制分区 中间层的键的 映射输出。键(或其子集) 键)用于导出 分区,通常通过散列 功能。总数 分区与编号相同 减少作业的任务。因此 这将控制m中的哪一个减少 将任务分配给中间键(因此 记录)已发送以进行还原 下面这本书在描述分区、键排序策略和折衷以及map reduce算法设计中的其他问题方面做得很好:我的猜测与上面的相同,
下面这本书在描述分区、键排序策略和折衷以及map reduce算法设计中的其他问题方面做得很好:我的猜测与上面的相同,只要您可以对键进行排序,并尝试根据您的分区标准分配它reducer,请参阅youtube mapreduce ucb 61a-34,他们谈论这些东西。这个问题对我来说有点不清楚。但我想我很清楚你想要什么 首先,如果每次调用reduce时都不做任何特殊操作,那么它只会得到一个包含一个或多个值的键(通过迭代器) 我的猜测是,您希望确保每个reducer只获得一个“键值对”。 基本上有两种方法:
由于这个问题的其他答案,我将添加更多细节: 有3种方法用于比较键(我从使用0.18.3 API的项目中提取了这些代码示例): 分区器
conf.setPartitionerClass(KeyPartitioner.class);
conf.setOutputKeyComparatorClass(KeyComparator.class);
conf.setOutputValueGroupingComparator(GroupComparator.class);
分区器只是为了确保“必须相同的东西最终会在同一个分区上”。如果您有一台计算机,那么只有一个分区,所以这不会有多大帮助
关键比较器
conf.setPartitionerClass(KeyPartitioner.class);
conf.setOutputKeyComparatorClass(KeyComparator.class);
conf.setOutputValueGroupingComparator(GroupComparator.class);
键比较器用于通过查看键对组中的“键-值对”进行排序。。。这肯定有点不同
组比较器
conf.setPartitionerClass(KeyPartitioner.class);
conf.setOutputKeyComparatorClass(KeyComparator.class);
conf.setOutputValueGroupingComparator(GroupComparator.class);
组比较器用于对不同但必须发送到同一减速机的键进行分组
HTH您确定要执行此操作吗?你能详细说明你的问题以便我能理解吗 你为什么要这么做 正如前面的回答中提到的,你必须做两件事