我正在编写一个mapreduce程序,其中必须在Mapper类中共享在Main方法中创建的String。这是使用新的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尝试了这个,并且它工作正常。一些如何,这里出了问题。可能出了什么问题。请帮帮我..
答案 0 :(得分:3)
不推荐使用Job
构造函数,使用Job.getInstance
方法创建Job对象。
根据getInstance
方法的文档,它实际上复制了传递的Configuration
对象,因此在创建作业后对配置所做的任何修改都不会对任何部分可见。系统。只需在创建作业前移动配置设置,如下所示:
Configuration conf = new Configuration();
conf.set("ImagesDir", ImagesDir);
Job job = Job.getInstance(conf);
答案 1 :(得分:0)
您是否必须按照自己的方式进行配置?如果没有,试试这个:
String ImagesDir = "/user/srini/images/"+ date;
FileOutputFormat.setOutputPath(job, new Path(ImageDir));
提醒一下,一般规则是将变量命名为image_dir
或imageDir
。