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

标签 java hadoop mapreduce

我正在编写一个 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/

相关文章:

Java : jscrollpane disable horizontal scrolling

hadoop - defaultFs的具体用途是什么

hadoop - MapR和Map Reduce有什么区别?

hadoop - 限制Hadoop 2.6.0中的并发映射任务数

python - 寻找基于Python的机器学习库来处理图像

json - Hadoop:无法运行 mapreduce 程序 ..java.io.IOException:error=12

java - 如何编辑 Jhipster Spring 数据库

java - 在 SearchView 中限制 onQueryTextChange

java - 如何在Java中初始化图形?

java - 为 Hadoop 生成源代码时出现 Maven 错误