分布式缓存文件检索问题



我的问题可能听起来很愚蠢,但我是Hadoop map reduce的新手。所以我很难弄清楚。

我正在实现 K 意味着在 map Reduce 中使用 Cloudera CDH4 (4.1.1) 进行聚类。
数据由具有 x 和 y 坐标的点组成。因此,我在每一步都更新质心,直到所有质心的变化小于 0.1。

因此,对于第一次迭代,我将示例质心文件放在分布式缓存中,使用

if (iteration == 0) {
    Path hdfsPath = new Path(input + "/centroid.txt");
    DistributedCache.addCacheFile(hdfsPath.toUri(), conf);
} else {
    Path hdfsPath = new Path(again_input + "/part-00000");
    DistributedCache.addCacheFile(hdfsPath.toUri(), conf);

对于下一次迭代,我正在获取与第一次迭代的输出相同的again_input目录,其中我存储了新计算的质心

但是,映射器再次获取它为第一次迭代获取的质心文件。
下面是在映射器类中获取质心文件的代码:

Path[] cacheFiles = DistributedCache.getLocalCacheFiles(job);
BufferedReader cacheReader = new BufferedReader(new FileReader(cacheFiles[0].toString()));

疑问 1:分布式缓存是在作业完成后清除所有文件还是保留它们?例如质心.txt在迭代 1 后清除。

疑问 2:我是否访问了正确的文件?

在这种情况下,您是否在迭代中重用配置类对象conf

我认为这就是问题所在。您能否检查一下哪些所有文件都添加到第二次迭代作业的分布式缓存中?

您可以通过遍历 Path[] 数组来做到这一点

Path[] cacheFiles;

相关内容

  • 没有找到相关文章

最新更新