【问题标题】:Mapper with multipleInput on Hadoop cluster在 Hadoop 集群上具有多个输入的映射器
【发布时间】:2014-01-25 00:19:04
【问题描述】:

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

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

我已经写了如下,但我的问题是:文本输入将在集群中的节点之间拆分,但是 reducer_1 的输出呢,因为我希望第二阶段的每个映射器都拥有整个 Reducer_1 的输出。

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

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    您对多个输入的使用似乎没问题。我会考虑使用分布式缓存将reducer_1 的输出与mapper_2 共享。

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

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

    setup() 在 map() 被调用之前为每个映射器运行一次,而 cleanup() 在最后一次调用 map() 之后为每个映射器运行一次

    【讨论】:

    • 感谢您的回答,我在编写 Mapper_2 代码时如何访问分布式缓存中的数据?
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 2014-01-06
    • 2018-08-31
    • 2013-11-06
    • 1970-01-01
    • 2019-09-23
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多