MapReduce1.1.2&0.2x区别,mapreduce


hadoop1.1.2,很多公司也在使用hadoop0.2x版本,因此市面上的hadoop资料版本不一,为了让大家能够更好的学习hadoop,本节讲述hadoop0.2x版本重要api的不同。


一. 自定义Mapper类的不同


在新api中,是继承类org.apache.hadoop.mapreduce.Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>。在旧api中,是继承类org.apache.hadoop.mapred.MapReduceBase,然后实现接口org.apache.hadoop.mapred.Mapper<K1, V1, K2, V2>。


在新api中,覆盖的map方法的第三个参数是Context类;在旧api中,覆盖的map方法的第三、四个形参分别是OutputCollector和Reporter类。在新api的Context中已经把两个类的功能合并到一起了,用户操作更简单。



二. 自定义Reducer类的不同


在新api中,是继承类org.apache.hadoop.mapreduce.Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>。在旧api中,是继承类org.apache.hadoop.mapred.MapReduceBase,然后实现接口org.apache.hadoop.mapred. Reducer<K1, V1, K2, V2>。


在新api中,覆盖的reduce方法的第二个参数是java.lang.Iterable<VALUEIN>。在旧api中,覆盖的reduce方法的第二个参数是java.util.Iterator<V2>。前者可以使用增强for循环进行处理,后者只能使用while循环处理了。


在新api中,覆盖的reduce方法的第三个参数是Context类;在旧api中,覆盖的reduce方法的第三、四个形参分别是OutputCollector和Reporter类。在新api的Context中已经把两个类的功能合并到一起了,用户操作更简单。




三. 驱动代码main方法的不同


在新api中,驱动代码主要是通过org.apache.hadoop.mapreduce.Job类实现的,通过该类管理各种配置,然后调用waitForCompletion(boolean)方法把代码提交给JobTracker执行。在旧api中,驱动代码主要是通过org.apache.hadoop.mapred.JobConf.JobConf(Configuration, Class)类实现的,通过该类管理各种配置。对于job的提交,是通过org.apache.hadoop.mapred.JobClient类的runJob(JobConf)方法实现的。可见,新api中把JobConf和JobClient的功能进行了合并,用户调用更方便。


其中,JobConf类与Job类的方法名称几乎一致,只是传递的形参类型大不相同了。在新api中的Job类,要求setXXX(…)的形参必须是org.apache.hadoop.mapreduce及其子包下面的类;而旧api中的JobConf类,要求setXXX(…)的形参必须是org.apache.hadoop.mapred及其子包下面的类。

相关内容