将变量发送到Mapper类

时间:2011-07-21 04:01:54

标签: java hadoop mapreduce

我正在尝试从用户那里获取输入并将其传递给我创建的mapper类,但每当值始终初始化为零而不是使用用户输入的实际值时。

如何确保每当我获得变量时,它始终保持相同的值。我注意到job1.setMapperClass(Parallel_for.class);创建类的实例,从而强制变量重新初始化为其原始值。以下是两个班级的链接。我试图从RunnerTool类中获取时间值。

Link to Java TestFor class

Link to RunnerTool class

// Mapper中的设置方法

@Override
public void setup(Context context) {
    int defaultValue = 1;
    times = context.getConfiguration().getInt("parallel_for_iteration", defaultValue );
    LOG.info(context.getConfiguration().get("parallel_for_iteration") + " Actually name from the commandline");
    LOG.info(times + " Actually number of iteration from the commandline");
}

// RunnerTools类

conf.setInt(ITERATION,次);

2 个答案:

答案 0 :(得分:1)

您应该注意,将在许多群集节点上重新创建mapper类,因此在运行作业时对mapper类的实例执行的任何初始化都不会影响其他节点。技术上相关的jar文件将在节点之间分配,然后将在那里创建映射器。 正如上面的答案所指出的,将信息传递给映射器的唯一方法是使用Configuration类。

答案 1 :(得分:0)

Mapper通过反射初始化,因此您不能让用户与映射器类进行交互。

相反,您拥有Configuration对象,如果您正在设置工作,则必须提供该对象。在那里,您可以使用conf.set("YOUR KEY", "YOUR VALUE")进行设置。在Mapper课程中,您可以覆盖名为setup(Context context)的方法,您可以使用context.getConfiguration().get("YOUR KEY")获取该值。也许保存到mapper局部变量。