我正在学习hadoop。对于字数统计,我有一些mapper代码。它与一个已经存在于堆栈溢流中的问题相同,但这个答案无法满足我们的疑虑。
package com.company;
import org.apache.hadoop.io.IntWritable;import import org.apache.hadoop.io.LongWritable;org.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
for (String word : line.split(" ")) {
if (word.length() > 0) {
context.write(new Text(word), new IntWritable(1));
}
}
}
}
在这里我们可以看到Mapper类的map方法被覆盖并且Context上下文出现了。当我打开hadoop jar文件时发现Context是hadoop库中Mapper类中的一个抽象类,它实现了MapContext接口,如下所示
public abstract class Context implements MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public Context() {
}
}
我的怀疑:
在我的WordCountMapper代码中,Context对象存储输出键值对。数据如何存储到Context对象中?这是一种清单吗?我可以在库中实现它吗?
谁在创建Context类对象?既然它是一个抽象类,哪一个是具体类呢?
是否hadoop框架本身创建了一个Context对象,我们将数据复制到HDFS中?它是如何产生的?
有什么建议吗?