MapReduce Map Tasks共享输入数据

时间:2011-11-07 13:05:53

标签: hadoop mapreduce

我最近开始研究MapReduce / Hadoop框架,并想知道我的问题是否真的适合框架。

考虑一下。考虑一个示例,其中我有一大组输入文本文件,另外,作为输入,我想要接受大量关键字(例如,包含在单个文件中)。对于每个关键字,我希望在每个文本文件中搜索并报告该文件中该关键字的实例数。 text我将为每个关键字为每个文本文件重复此操作。

这个场景与我在网上看到的例子略有不同,因为我不仅要将搜索的文本文档作为输入,还要搜索它们的关键字。这意味着每个Map任务可能会多次处理同一输入文本文件(每个关键字一次)。

像这样的问题是否适合MapReduce框架?

1 个答案:

答案 0 :(得分:4)

提到的场景绝对适用于MapReduce框架。

要搜索的关键字不必是地图功能的输入参数。有两种选择。

  1. 包含关键字的文件可以放入HDFS,并使用HDFS API在map函数中读取。

  2. DistributedCache也可以考虑在地图制作者之间共享同一个文件。

  3. 所有初始化如在HDFS中读取文件都可以在o.a.h.mapreduce.mapper#setup()函数中完成。

    在映射器中获取关键字列表后,可以在输入文件中搜索它们并发出计数。

    可能有一些更好的文本处理算法。使用MapReduce检查Data-Intensive Text Processing with MapReduce书籍以进行文本处理。

    要考虑的一件事是,如果数据很小,那么使用Hadoop比使用Shell脚本需要大量的开销。对于大数据,使用Hadoop是一个优势。