在hadoop集群上运行时不调用configure()但可以在Eclipse上调用,DistributedCache FIleNotFoundException

时间:2013-04-15 05:59:17

标签: eclipse hadoop configure filenotfoundexception distributed-cache

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

1 个答案:

答案 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