只是一个基本问题。我知道Mapper和Reducer是Hadoop版本2中的接口。但是在编码时我仍然看到使用 扩展映射器或扩展reducer而不是implements <的示例/strong>。是否存在这样的原因,或者由于向后兼容性而在旧版本中实现它们?这是我一直在学习的链接 https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#MapReduce_-_User_Interfaces
答案 0 :(得分:1)
不确定您在该页面上的哪个位置读取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>
答案 1 :(得分:0)
我仔细研究一下API后就发现了这一点。 的 org.apache.hadoop.mapreduce 类Reducer 适用于Hadoop2,其中Mapper和Reducer是类, org.apache.hadoop.mapred接口Reducer 在Hadoop 1中,它们是在Hadoop 2中编译的接口。这只是旧API和支持向后兼容性的新API之间的区别
答案 2 :(得分:0)
是-Mapper和Reducer是HADOOP-1x中的类,并且在后来的HADOOP -2x版本中已经增强到INTERFACE
示例-CODE:
在先前版本的HADOOP
中公共静态类New_Map扩展MapReduceBase实现Mapper {
在HADOOP-2x中
公共静态类New_Map扩展了Mapper {