我正在编写一个 mapreduce 程序,其中必须在 Mapper 类中共享在 Main 方法中创建的字符串。这是使用新的 mapreduce api。我正确编码并在 main 方法中使用配置设置变量,如下所示。
Configuration conf = new Configuration();
Job job = new Job(conf);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmsss");
String date = sdf.format(new Date());
String ImagesDir = "/user/srini/images/"+ date;
conf.set("ImagesDir", ImagesDir);
然后我在 Mapper 类设置方法中选择变量,如下所示。首先在类中创建一个变量作为 String OutputPath,然后在设置中执行以下操作。
Configuration conf = context.getConfiguration();
OutputPath = conf.get("ImagesDir");
并在 map 方法中使用了这个变量。问题是,变量 OutputPath 中的值始终为 null。很久以前,我就在 Old mapred API 中使用 JobConf 尝试过这个,它运行良好。一些如何,它在这里出错了。可能出了什么问题。请帮帮我..
最佳答案
Job
构造函数已弃用,请使用 Job.getInstance
方法创建 Job 对象。
根据getInstance
方法的文档,它实际上复制了传递的Configuration
对象,因此您在创建Job 后对Configuration 所做的任何修改都不会对系统的任何部分可见。只需将配置设置移动到作业创建之前,如下所示:
Configuration conf = new Configuration();
conf.set("ImagesDir", ImagesDir);
Job job = Job.getInstance(conf);
关于java - MapReduce 程序不在 main 和 mapper 之间共享字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168994/