MR中的Context类到底是谁?
最近在学习MR编程,但是对Context类(如下代码标红处)始终没能真正的理解。
public void map(Object key, Textvalue, Context context) throws IOException,InterruptedException{
}
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException,InterruptedException {
}
通过百度,有po主解释:
可以了解到,context应该是用来传递数据以及其他运行状态信息,map中的key、value写入context,让它传递给Reducer进行reduce,而reduce进行处理之后数据继续写入context,继续交给Hadoop写入hdfs系统。
从继承结构可以看出MapContext与ReduceContext均继承TaskInputOutputContext,没有重写继承而来的方法,所以它们继承的都是一致的
继承结构如下:
java.lang.object
org.apache.hadoop.mapreduce.JobContext
org.apache.hadoop.mapreduce.TaskAttemptContext
org.apache.hadoop.mapreduce.TaskInputOutputContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
----write()方法: void write (KEYOUT key,VALUEOUT value)
org.apache.hadoop.mapreduce.MapContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
org.apache.hadoop.mapreduce.ReduceContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
以上解释的出处: http://blog.csdn.net/songchunhong/article/details/50435717
但是这个解释好像不能解释下面的用法:
map类中:
context.write(new Text(vs), new Text(vs[j]));
context.write(new Text(vs[j]), new Text(vs));
这里为什么要Text类型?或者IntWritable类型?只是因为他们是序列化的??
我觉得这里的问题归结于: void write (KEYOUT key,VALUEOUT value) 中KEYOUT和VALUEOUT到底是什么类型??
reduce类中:
context.getConfiguration().get("count");
在上面po主解释的继承结构的各个类中找了好久,没找到getConfiguration()方法???
有点混沌,请路过的大神指点一下。
|
|