Mapper和Reducer是Hadoop版本2中的接口



这只是一个基本问题。我知道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.Mapperorg.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{

相关内容

  • 没有找到相关文章

最新更新