configure()在hadoop集群上运行时不能调用,但可以在eclipse、distributedcache filenotfoundexception上调用

nbnkbykc  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(367)

我的程序使用分布式缓存来缓存文件

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集群中运行它时,我发现这个部分没有被调用!为什么会这样?我需要设置一些配置吗?

ltskdhd1

ltskdhd11#

问题解决了,原来我犯了两个错误:
1) 我在configure()的开头添加了一个system.out.println(),但是没有显示出来,结果是mapreduce不能在mapreduce阶段使用system.out.println(),如果我们想看到它,我们需要查看日志,详细信息要感谢hadoop mapreduce框架在哪里发送我的system.out.print()语句(标准输出)
2) 我真正的错误与distributedcache有关,我添加了一个文件并希望将其读入内存,要打开路径,需要filesystem.getlocal()如下:

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

多亏了hadoop:filenotfoundexepion从distributedcache获取文件

相关问题