Hadoop Map Reduce:MapOutputValueClass:Map <string,string =“”>?</string,>

时间:2012-06-15 07:48:20

标签: java performance hadoop mapreduce

我有一个Java MR程序。我的Map方法的输出是各种字符串/数字,我现在把它放到一个字符串中。在Reduce中,我将String拆分然后使用Parameters。现在我想知道这是不是可以做得更容易。

我在考虑一个Map,其中我将String / Numbers作为值存储,并使用一个描述每个值的命名键。这个Map将是我的“Value Out”(MapOutputValueClass)。

这可能吗?正如我在文档中读到的那样,我想我的想法是不可实现的:

The key and value classes have to be serializable by the framework and hence need to implement the Writable interface. Additionally, the key classes have to implement the WritableComparable interface to facilitate sorting by the framework.

那么您建议我选择哪个MapOutputValueClass? :-)也许拿一张地图并在ImmutableBytesWritable中转换它?我也不想放慢我的计划......

感谢您的回答!

1 个答案:

答案 0 :(得分:1)

您可以使用各种字符串/数字编写自己的类。并将其作为mapper的输出值类和reducer的输入值类传递,例如。

Class Foo{
     String A;
     String B;
     int c, d;

      ....
}
你的映射器中的

public class MyMapper extends Mapper<Text, Text, Text, Foo>{
      ....
}
你的减速机中的

public class MyReducer extends Reducer<Text, Foo, Text, LongWritable>{
       ...
}

在您的驱动程序中:

设置映射器输出值类:

job.setMapOutputValueClass(Foo.class);

请记住,当您extends Mapper时,您需要填写的课程顺序为:<KEYIN_CLASS, VALUEIN_CLASS, KEYOUT_CLASS, VALUEOUT_CLASS>Reducer