我正在尝试将一些数据从映射器保存到作业/主要,以便我可以在其他作业中使用它。
我尝试在我的主类(包含主函数)中使用静态变量,但是当映射器将数据添加到静态变量并且我尝试在工作完成后打印该变量时,我发现没有新数据,就像映射器修改了该静态变量的另一个实例..
现在我尝试使用配置来设置映射器中的数据:
映射器
context.getConfiguration().set("3", "somedata");
主要
boolean step1Completed = step1.waitForCompletion(true);
System.out.println(step1.getConfiguration().get("3"));
不幸的是,这打印了
null
。
还有其他方法吗?我正在尝试保存一些数据,以便在其他工作中使用它,但我发现仅为此使用一个文件有点极端,因为数据只是
int,string
的索引来映射我在上一份工作中需要的一些标题.
据我所知这是不可能的。 Mappers 和Reducers 以分布式方式独立工作。每个任务都有自己的本地conf 实例。您必须将数据持久保存到 HDFS,同时每个作业都是独立的。
您还可以利用 MapReduce Chaining 机制(example)来运行作业链。此外,您可以在 Azkaban、Oozie 等中设计工作流程,将输出传递给另一个作业。
这确实是不可能的,因为配置是从作业到映射器/减速器,而不是相反。 我最终只是在上一份作业的设置中直接从 HDFS 读取文件。
谢谢大家的意见。