Configuration.set 可以在 Mapper 中使用吗?
can Configuration.set be used in the Mapper?
我正在尝试将一些数据从 Mapper 保存到 Job/Main,以便我可以在其他作业中使用它。
我试图在我的 main class(包含主函数)中使用一个静态变量,但是当 Mapper 将数据添加到静态变量并且我尝试在工作完成时打印变量我发现没有新的数据,好像Mapper修改了那个静态变量的另一个实例..
现在我正在尝试使用配置来设置来自映射器的数据:
映射器
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 链接机制 (example) 来 运行 作业链。此外,您可以在 Azkaban、Oozie 等中设计工作流,将输出传递给另一个作业。
这确实是不可能的,因为配置是从作业到 mapper/reducer 而不是相反。
我最后只是在上一份工作的设置中直接从 HDFS 读取文件。
谢谢大家的意见。
我正在尝试将一些数据从 Mapper 保存到 Job/Main,以便我可以在其他作业中使用它。
我试图在我的 main class(包含主函数)中使用一个静态变量,但是当 Mapper 将数据添加到静态变量并且我尝试在工作完成时打印变量我发现没有新的数据,好像Mapper修改了那个静态变量的另一个实例..
现在我正在尝试使用配置来设置来自映射器的数据:
映射器
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 链接机制 (example) 来 运行 作业链。此外,您可以在 Azkaban、Oozie 等中设计工作流,将输出传递给另一个作业。
这确实是不可能的,因为配置是从作业到 mapper/reducer 而不是相反。 我最后只是在上一份工作的设置中直接从 HDFS 读取文件。
谢谢大家的意见。