java - MapReduce 多个归约任务

标签 java hadoop mapreduce

我必须获取 Mapper 的输出并将其传递给我的 Reducer 4 次。

Reducer 是数据之间的合并。所以在 Mapper 之后,Reducer 在第一次迭代时合并一些数据,更改键和重新合并以及第二次迭代,等等......

我尝试使用 job.setNumReduceTasks(4)但什么也没发生。我只有 1 个输出和一个简单的 System.out.println()放置在我的 Reducer 中仅显示 1 条消息。

Job job = new Job(getConf());


job.setJarByClass(Driver.class);
job.setJobName(this.getClass().getName());

FileInputFormat.setInputPaths(job, new Path(input));
FileOutputFormat.setOutputPath(job, new Path(output+System.nanoTime()));

job.setMapperClass(KMMapper.class);

job.setReducerClass(KMReducer.class);
job.setNumReduceTasks(4);

job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);

job.waitForCompletion(true);

- - - - - 编辑 - - - - -

Also, please update your question with possible i/p adn o/p



我必须实现一种新的数据聚类方式。

映射器是聚类算法,输出是聚类中点的键/列表。

每个 Reducer 将集群与相同的键进行比较,如果它们“相似”,则 reducer 将其合并。 reducer 选择新键,输出是新键/点列表。通过随机选择新 key 和大量迭代,将比较所有初始集群。

最佳答案

I have to take the output of my Mapper and pass it 4 times to my Reducer.



从上面的陈述中,我可以理解您的数据必须按顺序过滤/处理 4 次。做os,MapReduce提供了ChainMapperChainReducer .

使用 job.setNumReduceTasks(4);仅有助于并行运行 4-reducer 任务,基于默认的 key-partition 机制共享映射器输出(称为中间数据)。

从您问题的另一部分来看,可以引入自定义分区。因此,它们将键值对排列为值的键列表。然后,根据需要的过滤机制,在reducer中合并结果。

关于java - MapReduce 多个归约任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42224273/

相关文章:

scala - 支持Map的IDE减少Scala中的程序

java - 如何计算 LinkedList<String> 的实际大小(以字节为单位)?

java - 需要帮助了解程序的执行

java - 向树中添加新元素也会将其添加到树的部分副本中

java - 在 Hadoop 排序中映射中的键类型不匹配

ubuntu - start-dfs.sh 抛出端口 22 : connection timeout error

hadoop - 如何知道执行的奴隶数量

java - 图形程序适用于 Windows,但不适用于 Mac

hadoop - Hadoop 中的自定义分区程序

hadoop - 如何获取 Reducer 中 Mappers 输出的记录数