我正在 opensuse linux 上使用 hadoop 19,我没有使用任何集群,而是在我的机器本身上运行我的 hadoop 代码。我遵循放入分布式缓存的标准技术,但我不是一次又一次地从分布式缓存访问文件,而是将文件的内容存储在一个数组中。从文件中提取的这部分是在configure()函数中完成的。当我尝试使用字段名称时,出现 nullPointerException。这是代码的一部分:
.
..part of main()
..
DistributedCache.addCacheFile(new URI("/home/hmobile/hadoop-0.19.2/output/part-00000"), conf2);
DistributedCache.addCacheFile(new URI("/home/hmobile/hadoop-0.19.2/output/part-00001"), conf2);
.
.part of mapper
public void configure(JobConf conf2)
{
String wrd; String line; try {
localFiles = DistributedCache.getLocalCacheFiles(conf2);
System.out.println(localFiles[0].getName());// error NULLPOINTEREXCEPTION
} catch (IOException ex) {
Logger.getLogger(blur2.class.getName()).log(Level.SEVERE, null, ex);
}
for(Path f:localFiles)// error NULLPOINTEREXCEPTION
{
if(!f.getName().endsWith("crc"))
{
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(f.toString()));
这样的处理可以不在configure()中进行吗?
这取决于您是否使用本地作业运行程序(mapred.job.tracker=local)或是否在伪分布式模式下运行(即mapred.job.tracker=localhost:8021或=mynode.mydomain。 com:8021)。分布式缓存的作用是NOT工作在本地模式下,只有伪分布式和全分布式模式。
在configure()中使用分布式缓存就可以了,否则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)