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