我想在reducer1的内存中保存文件A,在reducer2的内存中保存文件B。这可能在hadoop中使用分布式缓存技术吗?或者,还有其他方法可以实现吗?
谢谢
我想在reducer1的内存中保存文件A,在reducer2的内存中保存文件B。这可能在hadoop中使用分布式缓存技术吗?或者,还有其他方法可以实现吗?
谢谢
是的,如果文件非常小,您可以将这些文件设置在分布式缓存中。按照此链接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;
}
}
看看有没有帮助
问题(它是 Hadoop 的一个基本问题)是任务跟踪器为每个任务启动新的 JVM 进程 - 否定内存缓存的任何好处。您可以将任务跟踪器配置为在同一个 VM 中运行 - 但许多 Hadoop 内部使用 System.exit() 以及许多 Hadoop 作业......使得这样的配置毫无意义。
您可以将 GridGain 集群与 Hadoop 集群共同部署,并通过同一物理主机上的两个 JVM(即 GridGain 和 Hadoop 的任务跟踪器 JVM)之间的快速环回连接使用 GridGain 进行内存缓存 - 这是由我们的几个客户完成的.