2013-04-10 31 views

回答

2

是所述相同映射器内它处于setup()map()cleanup()所述一个和相同上下文对象。

正如你可以看到这些方法是从run()调用,该方法是这样如下:

public void run(Context context) throws IOException, InterruptedException { 
    setup(context); 
    while (context.nextKeyValue()) { 
     map(context.getCurrentKey(), context.getCurrentValue(), context); 
    } 
    cleanup(context); 
    } 

这应该回答你点1和2,和第3点,你可以重写run方法如Javadoc所示:

专家用户可以重写此方法以更完整地控制Mapper的执行。

也许你不需要保留一个成员字段的上下文,但确定你可以。而且,虽然对象是相同的,但它的属性值可以在任何方法中设置或取消设置,使其处于与传递给其他方法(设置,映射或清理)时不同的状态。

1

这里是Mapper.Context的文档。考虑到特定的工作,像getJobID()这样的一些属性保持不变,而像getInputSplit()这样的一些属性在同一作业中的地图上可能会有所不同。