1

我有一个脚本,它匹配 500 万条记录(A)和 4 万条记录(B)。如果匹配,则将电子邮件异步放置到队列中。

如果 A 的某些属性与 B 匹配,则匹配发生。目前此脚本大约需要 1 天才能完成。

我想将这段时间减少到使用 hadoop 的 3 到 4 个小时。

我想,我会将 A 存储在文件中,这个文件将输入到我的 Mapper 中。可以淘汰减速机。

对于 B 的最小或无磁盘读取的存储策略应该是什么?就像我应该把它放在哪里一样。内存缓存、hdfs 等。Memcache 似乎是一个不错的选择,因为它消除了运行时的磁盘访问。但欢迎提出建议。

我是hadoop的新手。那么在这种情况下推荐的方法是什么。

4

1 回答 1

3

我不确定我能不能给出一个合适的答案......
你的 B 文件是否足够小,可以将它们全部放入映射器的内存中?
如果是这样,Hadoop 有一种称为分布式缓存的机制。它可以将文件分发到集群中的所有节点。在您的情况下,您可以使 B 成为缓存文件,通过 configure() 将其加载到内存中并在映射器中使用它。

DistributedCache.addCacheFile(/*B's path*/); //in run()

于 2012-05-13T06:10:08.400 回答