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