2014-01-24 42 views
0

我必须实现两个mapReduce作业,其中阶段II(Mapper_2)中的映射器需要在阶段I(reducer_1)中具有Reducer的输出。Mapper with multipleInput on Hadoop cluster

Mapper_2还需要另一个大文本文件(2TB)的输入。

我写了如下,但我的问题是:文本输入将分散在群集中的节点,但减速器_1的输出如何,因为我希望在阶段II中的每个映射器具有整个Reducer_1的输出。

MultipleInputs.addInputPath(Job, TextInputPath, SomeInputFormat.class, Mapper_2.class); 
MultipleInputs.addInputPath(Job, Ruducer_1OutputPath, SomeInputFormat.class, Mapper_2.class); 

回答

1

您使用多输入似乎很好。我会考虑使用分布式缓存来将reducer_1的输出与mapper_2共享。

JobConf job = new JobConf(); 
DistributedCache.addCacheFile(new URI("/path/to/reducer_1/ouput"), 
           job); 

另外,使用分布式缓存时,请记住在mapper_2的setup方法中读取缓存文件。

设置()在地图前,每个映射器()被调用和清理(运行一次),每个映射后的最后一次调用映射()

+0

谢谢您的回答,我怎么能在distributedCache访问数据运行一次当我写Mapper_2代码? – SNSI