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_Mapreduce - Fatal编程技术网

Hadoop中无减缩器的组合器

Hadoop中无减缩器的组合器,hadoop,mapreduce,Hadoop,Mapreduce,我可以编写一个只有映射器和组合器的Hadoop代码吗 setMapperClass(WordCountMapper.class) job.setCombinerClass(WordCountReducer.class) conf.setInt(“mapred.reduce.tasks”,0) 我试图这么做,但我总是看到我有一个减少工作跟踪链接的任务 已启动的减少任务=1 如何在保留合并器的同时删除减速机?这可能吗?你需要告诉你的工作,你不关心减速机: 你可以用它来实现目标 不执行缩减,将所有输入

我可以编写一个只有映射器和组合器的Hadoop代码吗

setMapperClass(WordCountMapper.class)
job.setCombinerClass(WordCountReducer.class)

conf.setInt(“mapred.reduce.tasks”,0)

我试图这么做,但我总是看到我有一个减少工作跟踪链接的任务

已启动的减少任务=1


如何在保留合并器的同时删除减速机?这可能吗?

你需要告诉你的工作,你不关心减速机:

你可以用它来实现目标

不执行缩减,将所有输入值直接写入输出


我不确定您是否可以保留合并器,但我将从前面的几行开始。

在您描述的情况下,您应该使用减速机。用作键:Context.getInputSplit().getPath()+Context.getInputSplit().getStart()-此组合对于每个映射器都是唯一的。

我尝试了此选项(即job.setNumReduceTasks(0);)此选项将reduce任务数设置为零,但在这种情况下我们不能使用组合器@HadoopUser然后使用减速机!:)为什么不想使用减速器?一开始,我希望由映射器X处理的所有映射任务都由同一减速器执行,问题是我不知道选择什么作为保证这一点的关键。所以,我说有一个组合器会使这个任务更容易,因为它不需要看钥匙。。它只是将MapperX执行的所有映射任务作为一个包来考虑。哦,非常感谢,这绝对可以解决我的问题:)使用自定义分区器(比如,标识)并使用主机名作为密钥不是更好吗?这应该会使洗牌变得简单,这比@Evgeny的巧妙技巧产生的完全洗牌要快,也应该有效:)但你说的“完全洗牌”是什么意思?我试图回答每个映射器的输出是如何被另一个减速机处理的。但是,实际上,作为算法,要求是有问题的:如果每个映射器的输出都由另一个Reducer处理,那么为什么首先需要Reducer呢?因此,可能根本不需要洗牌、排序和减少?很抱歉,迟了回复,我刚刚看到了您的答案。你是对的,在我的例子中,每个映射器都有其独立的任务,因此我想要一个小型的缩减器来循环映射器X生成的所有数据。无论如何,我使用in-mapper组合器解决了这个问题:-)在这种情况下,将不使用/使用洗牌:-)
// new Hadoop API
jobConf.setNumReduceTasks(0);

// old Hadoop API
job.setNumReduceTasks(0);