1

我想在reducer1的内存中保存文件A,在reducer2的内存中保存文件B。这可能在hadoop中使用分布式缓存技术吗?或者,还有其他方法可以实现吗?

谢谢

4

2 回答 2

1

是的,如果文件非常小,您可以将这些文件设置在分布式缓存中。按照此链接http://developer.yahoo.com/hadoop/tutorial/module5.html#auxdata。它可能对你有用。

如果您考虑这部分代码,则取决于您要在哪个减速器中处理哪个文件。

Path [] cacheFiles = DistributedCache.getLocalCacheFiles(conf);
      if (null != cacheFiles && cacheFiles.length > 0) {
        for (Path cachePath : cacheFiles) {
          if (cachePath.getName().equals(stopwordCacheName)) {
            loadStopWords(cachePath);
            break;
          }
        }

看看有没有帮助

于 2012-09-24T02:23:39.070 回答
0

问题(它是 Hadoop 的一个基本问题)是任务跟踪器为每个任务启动新的 JVM 进程 - 否定内存缓存的任何好处。您可以将任务跟踪器配置为在同一个 VM 中运行 - 但许多 Hadoop 内部使用 System.exit() 以及许多 Hadoop 作业......使得这样的配置毫无意义。

您可以将 GridGain 集群与 Hadoop 集群共同部署,并通过同一物理主机上的两个 JVM(即 GridGain 和 Hadoop 的任务跟踪器 JVM)之间的快速环回连接使用 GridGain 进行内存缓存 - 这是由我们的几个客户完成的.

于 2012-09-24T03:59:10.800 回答