我的程序使用分布式缓存来缓存文件
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集群中运行它时,我发现这个部分没有被调用!为什么会这样?我需要设置一些配置吗?
1条答案
按热度按时间ltskdhd11#
问题解决了,原来我犯了两个错误:
1) 我在configure()的开头添加了一个system.out.println(),但是没有显示出来,结果是mapreduce不能在mapreduce阶段使用system.out.println(),如果我们想看到它,我们需要查看日志,详细信息要感谢hadoop mapreduce框架在哪里发送我的system.out.print()语句(标准输出)
2) 我真正的错误与distributedcache有关,我添加了一个文件并希望将其读入内存,要打开路径,需要filesystem.getlocal()如下:
多亏了hadoop:filenotfoundexepion从distributedcache获取文件