我正在尝试从用户那里获取输入并将其传递给我创建的mapper类,但每当值始终初始化为零而不是使用用户输入的实际值时。
如何确保每当我获得变量时,它始终保持相同的值。我注意到job1.setMapperClass(Parallel_for.class);创建类的实例,从而强制变量重新初始化为其原始值。以下是两个班级的链接。我试图从RunnerTool类中获取时间值。
// 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,次);
答案 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局部变量。