我是hadoop的新手,我正在尝试使用reducer类。所以,基本上我在网上找到了一个教程,他们的reduce类是这样的,
public class mapReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
IntWritable total = new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values,
Reducer<Text, InWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException{
for (IntWritable value: values){
total += value.get();
}
context.write(key, count);
}
}
所以我想把总数改成 myCustomObj
. 参考上面的例子,
//..
myCustomObj total = new myCustomObj();
@Override
protected void reduce(Text key, Iterable<myCustomObj> values,
Reducer<Text, InWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException{
for (myCustomObj value: values){
total.add(value);
}
context.write(key, total.getPrimaryAttribute());
}
目标:我想要的是 key -> total
hadoop之后的对象已经完成了还原。我想上面的代码只会输出 key -> primaryAttribute
.
建议:如果这太乏味,我有一个想法,以xml格式将我需要的细节存储在磁盘上。但是,我不确定map reducer背后的原理,reducer是在服务器上执行还是在客户机上执行(Map发生的地方)?如果它发生在客户机上,那么我会在所有客户机上都有一点点的xml文件。我只想把所有的信息集中到一台服务器上。
我希望我把问题说清楚。谢谢您
编辑:我试着在网上寻找资料来源。但是hadoop有很多定制。我不知道该看什么。
1条答案
按热度按时间xmakbtuz1#
为了能够减少一个自定义对象,首先,Map程序应该将这个对象作为一个值返回。假设对象的名称为:
CustomObject
Map器定义应如下所示:现在customobject本身应该实现
WritableComparable
与所有三种所需方法的接口(主要针对洗牌阶段的要求):write
-定义对象存储到磁盘的方式readFields
-如何从磁盘读取存储的对象compareTo
-定义对象的排序方式(您可以将此项留空,因为在无序播放阶段只有键用于排序)减速机签名应如下所示:
最后,在配置作业时,应该指定适当的输入/输出组合。
这应该能奏效。