Context传递给Mapper函数(设置,映射,运行,清理)是否始终相同?

时间:2013-04-10 20:07:47

标签: java hadoop

  1. 是否将相同的Context传入设置,映射,运行,清理 映射器?
  2. 是否会出现不一样的情况?
  3. 您可以在设置中将上下文设为成员字段吗?
  4. Mapper

2 个答案:

答案 0 :(得分:2)

是在相同的映射器中,它是setup()map()cleanup()中的同一个上下文对象。< / p>

正如您可能会看到这些方法是从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。

也许您不需要为上下文保留成员字段,但确定可以。

此外,虽然对象是相同的,但它的属性值可以在任何方法中设置或取消设置,使其处于与传递给另一个方法(设置,映射或清理)时不同的状态。 / p>

答案 1 :(得分:1)

以下是Mapper.Context的文档。在给定特定工作的情况下,某些属性(如getJobID())保持不变,而某些属性(如getInputSplit())可能会在同一作业中的地图上有所不同。