我的程序使用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集群中运行它时,我发现这个部分没有被调用! 为什么会这样? 我需要在配置中设置一些内容吗?
答案 0 :(得分:0)
问题解决了,结果我犯了两个错误:
1)我在configure()的开头添加了一个System.out.println(),但它没有显示出来 事实证明mapreduce不能在mapreduce阶段使用System.out.println(),如果我们想看到它,我们需要查看我们的日志,详情请参阅Where does hadoop mapreduce framework send my System.out.print() statements ? (stdout)
2)我的真正错误与DistributedCache有关,我添加了一个文件并希望将其读入内存,打开路径,我们需要FileSystem.getLocal()如下:
localFiles = DistributedCache.getLocalCacheFiles(job);
FileSystem fs = FileSystem.getLocal(job);
FSDataInputStream inF = fs.open(localFiles[0]);
感谢Hadoop: FileNotFoundExcepion when getting file from DistributedCache