Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hadoop+;每个减速器都有一把钥匙_Hadoop - Fatal编程技术网

hadoop+;每个减速器都有一把钥匙

hadoop+;每个减速器都有一把钥匙,hadoop,Hadoop,Hadoop中有没有办法确保每个reducer只获得一个映射器输出的键?通过实现分区器接口,您可以控制哪些键被发送到哪些reducer 从Hadoop API文档: 分区器控制分区 中间层的键的 映射输出。键(或其子集) 键)用于导出 分区,通常通过散列 功能。总数 分区与编号相同 减少作业的任务。因此 这将控制m中的哪一个减少 将任务分配给中间键(因此 记录)已发送以进行还原 下面这本书在描述分区、键排序策略和折衷以及map reduce算法设计中的其他问题方面做得很好:我的猜测与上面的相同,

Hadoop中有没有办法确保每个reducer只获得一个映射器输出的键?

通过实现分区器接口,您可以控制哪些键被发送到哪些reducer

从Hadoop API文档:

分区器控制分区 中间层的键的 映射输出。键(或其子集) 键)用于导出 分区,通常通过散列 功能。总数 分区与编号相同 减少作业的任务。因此 这将控制m中的哪一个减少 将任务分配给中间键(因此 记录)已发送以进行还原


下面这本书在描述分区、键排序策略和折衷以及map reduce算法设计中的其他问题方面做得很好:

我的猜测与上面的相同,只要您可以对键进行排序,并尝试根据您的分区标准分配它reducer,请参阅youtube mapreduce ucb 61a-34,他们谈论这些东西。

这个问题对我来说有点不清楚。但我想我很清楚你想要什么

首先,如果每次调用reduce时都不做任何特殊操作,那么它只会得到一个包含一个或多个值的键(通过迭代器)

我的猜测是,您希望确保每个reducer只获得一个“键值对”。 基本上有两种方法:

  • 在映射器中确保输出的所有键都是唯一的。因此,每个键只有一个值
  • 强制减速器执行此操作,方法是强制使用一个组比较器,该组比较器仅将所有键分类为不同的键 如果我没弄错你的问题。您应该实现一个GroupComparator,它简单地声明所有键都是不同的,因此应该发送到不同的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

    您确定要执行此操作吗?你能详细说明你的问题以便我能理解吗 你为什么要这么做

    正如前面的回答中提到的,你必须做两件事

  • 编写一个分区器,使每个键都与一个唯一的缩减器相关联
  • 确保群集中的减速器插槽数大于或等于 您将拥有的唯一密钥的数量
  • Pranab

    如果您只有一个节点“集群”,那么所有密钥都将发送到分区“0”。使用分区器不会奏效。请参阅我自己的答案,了解原因。