MapReduce程序不在main和mapper之间共享字符串变量

时间:2013-08-11 05:15:31

标签: java hadoop mapreduce

我正在编写一个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尝试了这个,并且它工作正常。一些如何,这里出了问题。可能出了什么问题。请帮帮我..

2 个答案:

答案 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_dirimageDir