这只是一个基本问题。我知道Mapper和Reducer是Hadoop版本2中的接口。但在编码时,我仍然看到使用extends mapper或extends reducer而不是实现的示例。这是有原因的吗?还是由于向后兼容性,它们被实现为旧版本?这是我一直在学习的链接https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#MapReduce_-_用户界面
不确定您在该页面上读到的Mapper和Reducer是MapReduce2的接口,但该页面上的源代码显然使用了类。关键字为extends
。
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
...
public static class TokenizerMapper extends Mapper
...
public static class IntSumReducer extends Reducer
需要注意的是,org.apache.hadoop.mapred.Mapper
和org.apache.hadoop.mapred.Reducer
是接口,但它们用于MapReduce1。
我认为将Mapper和Reducer重写为类的目的是简化类的创建,而不需要像那样使用extends MapReduceBase implements
class MyReducer<K extends WritableComparable, V extends Writable>
extends MapReduceBase implements Reducer<K, V, K, V>
我在仔细查看API时发现了这一点。org.apache.hadop.mapreduceClass Reducer适用于Hadoop2,其中Mapper和Reducer是Class,org.apache.hadoop.mapred Interface Reducer存在于hadoop 1中,它们也是在hadoop 2中编译的接口。这只是旧的API和支持向后兼容性的新API之间的区别
Yes-Mapper和Reducer是HADOOP-1x中的类,在后来的HADOOP-2x版本中已增强为INTERFACE
示例代码:
在HADOOP的早期版本中
公共静态类New_Map扩展MapReduceBase实现Mapper{
在HADOOP-2x中
公共静态类New_Map扩展Mapper{