hadoop之mapper类,hadoopmapper


Mapper类有四个方法:

(1)protected void setup(Context context)

(2)protected void map(KEYIN key,VALUEIN value,Context context)

(3)protected void cleanup(Context context)

(4)public void run(Context context)

setup()方法一般是在实例化时用户程序需要做的一些初始化工作(如打开一个全局文件,建立数据库链接等等)

cleanup()方法是收尾工作,如关闭文件或者执行map()后的键值对分发等。

map()方法承担主要的处理工作,一般我们些代码的时候主要用到的是map方法。

默认Mapper的run()方法的核心代码如下:

public void run(Context context) throws IOException,InterruptedException

{

     setup(context);

    while(context.nextKeyValue())

          map(context.getCurrentKey(),context,context.getCurrentValue(),context);

    cleanup(context);

}

setup和cleanup仅仅在初始化Mapper实例和Mapper任务结束时由系统作为回调函数分别各做一次,并不是每次调用map方法时都去执行。所以如果是要处理map中的某些数值数据时,想把代码写在cleanup里面需要特别注意。


Mapper输出结果到reduce阶段之前,还有几个可以自定义的步骤

(1)combiner  每个节点输出的键值可以先进行合并处理。

(2)合并处理之后如果还想将不同key值分配给不同reduce进行处理,称为shuffle洗牌过程,提供了一个partioner类来完成。

(3)如果想将key值自定义进行排序,这边提供了一个sort类,可以自定义进行排序











问各位,在Hadoop的每个Mapper类中都有一个setup()方法,

刚才调试了一下,貌似是1次。
 

在Hadoop中一个InputSplit对应一个Mapper类实例,那小弟想问一下:

Reducer的个数由Partition的数目确定。该数目可以由用户自己指定: conf.setNumReduceTasks()。
 

相关内容