我正在编写一个mapreduce程序,其中在Main方法中创建的String必须在Mapper类中共享。这是使用新的mapreduce api。我正确地进行了编码,并使用主方法中的配置设置了变量,如下所示。
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类设置方法中选择变量,如下所示。首先在类中创建一个变量StringOutputPath,然后在设置中执行以下操作。
Configuration conf = context.getConfiguration();
OutputPath = conf.get("ImagesDir");
并在map方法中使用了该变量。问题是,变量OutputPath中的值一直为null。我很久以前就在Oldmapredneneneba API中使用JobConf尝试过这种方法,效果很好。怎么了,这里出了问题。可能出了什么问题。请帮帮我。
Job
构造函数已弃用,请使用Job.getInstance
方法创建Job对象。
根据getInstance
方法的文档,它实际上复制了传递的Configuration
对象,因此在创建作业后对配置所做的任何修改对系统的任何部分都不可见。只需在创建作业之前移动配置设置,如下所示:
Configuration conf = new Configuration();
conf.set("ImagesDir", ImagesDir);
Job job = Job.getInstance(conf);
您必须按照自己的方式进行配置吗?如果没有,试试这个:
String ImagesDir = "/user/srini/images/"+ date;
FileOutputFormat.setOutputPath(job, new Path(ImageDir));
提醒一下,一般规则是将变量命名为image_dir
或imageDir
。