我在opensuse linux上使用hadoop 19,我不使用任何集群,而是在我的机器上运行hadoop代码。我遵循的标准技术是放入分布式缓存,但不是一次又一次地访问来自分布式缓存的文件,而是将文件的内容存储在一个数组中。从文件中提取的这一部分是在配置()函数中完成的。当我尝试使用fiel名称时,我得到了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()));这样的处理能不能在配置()中完成?
发布于 2010-07-10 22:58:37
这将取决于您是使用本地作业运行程序(mapred.job.tracker=local)还是以伪分布式模式(即mapred.job.tracker=localhost:8021或=mynode.mydomain.com:8021)运行。分布式缓存不工作在本地模式,只有伪分布和全分布模式.
否则,可以在配置()中使用分布式缓存。
https://stackoverflow.com/questions/3210222
复制相似问题