我正在尝试将某些数据从“映射器”保存到作业/主文件,以便可以在其他作业中使用它。

我试图在我的主类(包含主函数)中使用静态变量,但是当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等中设计工作流程,以将输出传递给另一个作业。

07-24 09:45
查看更多