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