0

我的程序使用 DistributedCache 来缓存文件

JobConf conf = new JobConf(new Configuration(), ItemMining.class);
DistributedCache.addCacheFile(new URI("output1/FList.txt"), conf);
DistributedCache.addCacheFile(new URI("output1/GList.txt"), conf);

我把文件放进去

configure(){

..
localFiles = DistributedCache.getLocalCacheFiles(job);
FileSystem fs = FileSystem.get(job);
FSDataInputStream inF = fs.open(localFiles[0]);
..

}

整个程序可以在 Eclipse 上运行并得到正确的结果。但是当我在Hadoop集群中运行它时,我发现这部分没有被调用!为什么会这样?我需要在配置中设置一些东西吗?

4

1 回答 1

0

问题解决了,原来我犯了两个错误:

1)我在configure()的开头添加了一个System.out.println(),但它没有显示,事实证明mapreduce不能在mapreduce阶段使用System.out.println(),如果我们想要要查看它,我们需要检查我们的日志,感谢hadoop mapreduce 框架在哪里发送我的 System.out.print() 语句的详细信息?(标准输出)

2)我真正的错误与分布式缓存有关,我添加了一个文件并想将其读入内存,打开路径,我们需要 FileSystem.getLocal() 如下:

    localFiles = DistributedCache.getLocalCacheFiles(job);
    FileSystem fs = FileSystem.getLocal(job);
    FSDataInputStream inF = fs.open(localFiles[0]); 

感谢Hadoop:从 DistributedCache 获取文件时的 FileNotFoundExcepion

于 2013-04-15T16:48:35.147 回答