吐槽一下,上一篇中用MarkDown编辑器感觉太差劲了,写一点花了那么多的时间。
还是接着上面的写,写到Context类的继承关系。在Mapper类中和Reducer类中使用的Context类名一样,但是它们却是不同的上下文对象,Mapper类中Context继承的是MapContext类,而Reducer类中Context继承的则是ReduceContext,但是这两个类都继承自相同的抽象父类TaskInputOutputContext,该类实现了Progressable接口,作用是将运行情况报告给Hadoop框架。
下图是Context类的继承关系:
不同层次的类的交互对象有所不同:
MapContext 关注 RecordReader<KEYIN,VALUEIN> reader 和 InputSplit split;
TaskInputOutputContext关注: RecordWriter<KEYOUT,VALUEOUT> output; StatusReporter reporter; OutputCommitter committer
TaskAttemptContext关注:TaskId
JobContext关注:Configuration conf 和JobId jobId
这样一层层传到上层类中的东西也越来越少,而在各层则会报告各自关注的对象。