在Hadoop集群上具有multipleInput的映射器

时间:2014-01-24 15:50:38

标签: hadoop mapreduce

我必须实现两个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);

1 个答案:

答案 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()为每个映射器运行一次