我是hadoop的新手,现在正在使用javaMap器/还原器代码。在工作中,我遇到了一个问题,我必须将Map器类的输出传递给两个不同的reducer类。如果可能的话。我们是否可以从同一个Map器类发送两个不同的输出…有人能告诉我吗。。
rhfm7lfc1#
我也试着这么做。根据我的发现,我们不能让Map器输出发送到两个还原器。但是可以通过区分减速器中的任务,在一个减速器中的两个减速器中执行您想要执行的任务。reducer可以根据一些关键标准选择任务。我必须警告你,我是hadoop新手,所以这可能不是最好的答案。Map程序将生成这样的键+-任务\u x。然后,reducer将调用不同的方法来处理任务我认为最好在末尾加上任务名称,以确保有效的分区。至于第二个问题,我相信您可以将同一Map器类的多个输出发送到reducer。这篇文章也许对你感兴趣,hadoop mapper能在输出中产生多个键吗?map方法如下所示
@Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { //do stuff 1 Text outKey1 = new Text(<Your_Original_Key>+"-TASK1"); context.write(outKey, task1OutValues); //do stuff 2 Text outKey2 = new Text(<Your_Original_Key>+"-TASK2"); context.write(outKey, task2OutValues); }
还原法
@Override protected void reduce(Text inkey, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException { String key = inKey.toString(); if(inKey.matches(".*-TASK1$")) { processTask1(values); } else if(inKey.matches(".*-TASK2$")) { processTask2(values); } }
1条答案
按热度按时间rhfm7lfc1#
我也试着这么做。根据我的发现,我们不能让Map器输出发送到两个还原器。但是可以通过区分减速器中的任务,在一个减速器中的两个减速器中执行您想要执行的任务。reducer可以根据一些关键标准选择任务。我必须警告你,我是hadoop新手,所以这可能不是最好的答案。
Map程序将生成这样的键+-任务\u x。然后,reducer将调用不同的方法来处理任务
我认为最好在末尾加上任务名称,以确保有效的分区。
至于第二个问题,我相信您可以将同一Map器类的多个输出发送到reducer。这篇文章也许对你感兴趣,hadoop mapper能在输出中产生多个键吗?
map方法如下所示
还原法