我必须实现两个mapReduce作业,其中阶段II中的Mapper(Mapper_2)需要在阶段I(reducer_1)中具有Reducer的输出。
Mapper_2还需要另一个大文本文件(2TB)输入。
我写的如下,但我的问题是:文本输入将在群集中的节点之间进行分割,但是减速器_1的输出如何,因为我希望第二阶段的每个映射器都具有整个Reducer_1的输出。
MultipleInputs.addInputPath(Job, TextInputPath, SomeInputFormat.class, Mapper_2.class);
MultipleInputs.addInputPath(Job, Ruducer_1OutputPath, SomeInputFormat.class, Mapper_2.class);
答案 0 :(得分:1)
您使用多个输入似乎很好。我将使用分布式缓存将reducer_1的输出与mapper_2共享。
JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("/path/to/reducer_1/ouput"),
job);
此外,使用分布式缓存时,请记住在mapper_2的setup方法中读取缓存文件。
setup()在调用map()之前为每个映射器运行一次,并且在最后一次调用map()之后,cleanup()为每个映射器运行一次