MapReduce Map任务共享输入数据



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

考虑这一点。考虑一个示例,其中我有一组大的输入文本文件,另外,作为输入,我希望接收一组大的关键字(例如,包含在单个文件中)。对于每个关键字,我希望在每个文本文件中进行搜索,并报告该文件中该关键字的实例数量。对于每个关键字,每个文本文件,我都会重复这个步骤。

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

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

上面提到的场景绝对适合MapReduce框架。

要搜索的关键字不需要作为map函数的输入参数。有两个选项。

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

  2. DistributedCache也可以考虑跨映射器共享相同的文件。

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

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

可能有一些更好的文本处理算法。查看《Data-Intensive Text Processing with MapReduce》这本书,了解如何使用MapReduce进行文本处理。

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

相关内容

  • 没有找到相关文章

最新更新