map任务中的Mapper类

在Hadoop1.1.2中,Mapper.java中的Mapper并不是一个接口,而是一个类;但是其作用就是一个接口,Mapper类是这个接口的默认实现;

我们在写自己map-reduce应用时,需要按照自己的需求实现自己的MyMapper类,我们实现的MyMapper类就必须是继承自这个Mapper类。

从源代码来看,原理如下所示:

在MapTask.java的runNewMapper函数中,有下面语句:

// make a mapper

    org.apache.hadoop.mapreduce.Mapper<INKEY,INVALUE,OUTKEY,OUTVALUE> mapper =

      (org.apache.hadoop.mapreduce.Mapper<INKEY,INVALUE,OUTKEY,OUTVALUE>)

        ReflectionUtils.newInstance(taskContext.getMapperClass(), job);

其中ReflectionUtils.newInstance(taskContext.getMapperClass(), job)就是在从任务的配置中获得实际Mapper类的实例,这个实际的Mapper类就是我们在map-reduce应用中自己实现的MyMapper类。由于这里是将MyMapper类赋值给了一个org.apache.hadoop.mapreduce.Mapper<INKEY,INVALUE,OUTKEY,OUTVALUE>类型,由此可见MyMapper类是必须继承自Mapper的,否则就会发生编译时错误的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值