Java MapReduce多重Reduce任务

Java MapReduce多重Reduce任务,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我必须获取映射器的输出,并将其传递给我的减速机4次 减速器是数据之间的合并。因此,在映射器之后,Reducer在第一次迭代时合并一些数据,更改关键帧并重新合并和第二次迭代,等等 我尝试使用job.setNumReduceTasks(4),但什么也没发生。我只有1个输出和一个简单的System.out.println()放在我的减速机中,只显示1条消息 Job job = new Job(getConf()); job.setJarByClass(Driver.class); job.setJ

我必须获取映射器的输出,并将其传递给我的减速机4次

减速器是数据之间的合并。因此,在映射器之后,Reducer在第一次迭代时合并一些数据,更改关键帧并重新合并和第二次迭代,等等

我尝试使用
job.setNumReduceTasks(4)
,但什么也没发生。我只有1个输出和一个简单的
System.out.println()
放在我的减速机中,只显示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);
----------编辑----------

此外,请用可能的i/p和o/p更新您的问题

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

映射器是集群算法,输出是集群中的关键点/点列表

每个Reducer使用相同的键比较集群,如果它们“相似”,则Reducer将其合并。减速器选择新关键点,输出为新关键点/点列表。通过随机选择新密钥和大量迭代,将比较所有初始集群

我必须获取映射器的输出并将其传递给我的 减速器

从上面的陈述中,我可以理解您的数据必须按顺序过滤/处理4次。要执行操作系统,MapReduce提供了
ChainMapper
ChainReducer

使用
job.setNumReduceTasks(4)
只会有助于并行运行4-reducer任务,根据默认的键分区机制共享映射器输出(称为中间数据)


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

通过集群,您的意思是需要对数据进行分区吗? 如果是这种情况,您需要添加分区器逻辑。(您可以提供一个键范围,以便映射器中的这些键进入特定的缩减器。)


或者,您可以做一件事,在完成第一个作业后,应用链接,以便它进入下一个作业,在那里您有一个标识映射器和还原器逻辑来执行任何业务逻辑。

job.setNumReduceTasks定义您将拥有的还原器数量,不是你应用了多少次减速器,我如何应用相同的减速器4或5次?不清楚你到底需要什么,但你是否尝试过运行相同的算法4次(例如,使用for循环)?您不能多次运行reduce阶段,因为reducer总是在映射器之后运行(MapReduce中没有reduce only作业,即使可以有map only作业)。我可以读到“ChainReducer类允许在reducer任务中的reducer之后链接多个映射器类。”但我想要的是相反的,MapReduce中的多个还原器MapReduce中的多个还原器只是用中间数据运行并行作业。很明显,没有一个接一个的减速机(顺序减速机)这样的机制。在我可以说是或不是之前,你为什么坚持要顺序减速机?而你也可以使用地图绘制工具。另外,请用可能的i/p和o/p更新您的问题。