本帖最后由 starrycheng 于 2016-12-21 17:35 编辑
Mapper的处理过程:
1.1. InputFormat 产生 InputSplit,并且调用RecordReader将这些逻辑单元(InputSplit)转化为map task的输入。其中InputSplit是map task处理的最小输入单元的逻辑表示。
1.2. 在客户端代码中调用Job类来设置参数,并执行在hadoop集群的上的MapReduce程序。
1.3. Mapper类在Job中被实例化,并且通过MapContext对象来传递参数设置。可以调用Job.getConfiguration().set(“myKey”, “myVal”)来设置参数。
1.4. Mapper的run()方法调用了自身的setup()来设置参数。
1.5. Mapper的run()方法调用map(KeyInType, ValInType, Context)方法来依次处理InputSplit中输入的key/value数据对。并且可以通过Context参数的Context.write(KeyOutType, ValOutType)方法来发射处理的结果。用户程序还可以用Context来设置状态信息等。同时,用户还可以用Job.setCombinerClass(Class)来设置Combiner,将map产生的中间态数据在Mapper本地进行汇聚,从而减少传递给Reducer的数据。
1.6. Mapper的run()方法调用cleanup()方法。
上面是map任务的过程,map需要调用RecordReader,这时候他需要初始化一次
个人观点,楼主也可以找出向左的资料,相互探讨
来自:
关于Mapper、Reducer的个人总结
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7066
|