【问题标题】:FileNotFoundException on hadoophadoop 上的 FileNotFoundException
【发布时间】:2013-01-11 06:36:57
【问题描述】:

在我的 map 函数中,我试图从分布式缓存中读取文件,将其内容加载到哈希映射中。

MapReduce 作业的 sys 输出日志打印 hashmap 的内容。这表明它已找到文件,已加载到数据结构中并执行了所需的操作。它遍历列表并打印其内容。从而证明操作成功。

但是,在运行 MR 作业几分钟后,我仍然收到以下错误:

27 年 13 月 1 日 18:44:21 信息 mapred.JobClient:任务 ID:尝试_201301271841_0001_m_000001_2,状态:失败 java.io.FileNotFoundException:文件不存在:/app/hadoop/jobs/nw_single_pred_in/predict 在 org.apache.hadoop.hdfs.DFSClient$DFSInputStream.openInfo(DFSClient.java:1843) 在 org.apache.hadoop.hdfs.DFSClient$DFSInputStream.(DFSClient.java:1834) 在 org.apache.hadoop.hdfs.DFSClient.open(DFSClient.java:578) 在 org.apache.hadoop.hdfs.DistributedFileSystem.open(DistributedFileSystem.java:154) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:427) 在 org.apache.hadoop.mapreduce.lib.input.LineRecordReader.initialize(LineRecordReader.java:67) 在 org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:522) 在 org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:370) 在 org.apache.hadoop.mapred.Child$4.run(Child.java:255) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:396) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 在 org.apache.hadoop.mapred.Child.main(Child.java:249)

这是用要放置在分布式缓存中的文件的位置初始化 Path 的部分

// 在 main 内部,被 try catch 块包围,但这里没有抛出异常 配置 conf = new Configuration(); // 与 conf 相关的其他内容 路径知识filepath = new Path(args[3]); // args[3] = /app/hadoop/jobs/nw_single_pred_in/predict/knowledge.txt DistributedCache.addCacheFile(knowledgefilepath.toUri(), conf); job.setJarByClass(NBprediction.class); // 其他作业设置 作业.waitForCompletion(true); // 开始加载

这个在map函数里面:

尝试 { System.out.println("里面试试!!"); 路径文件[]= DistributedCache.getLocalCacheFiles(context.getConfiguration()); 路径 cfile = new Path(files[0].toString()); // 只有一个文件 System.out.println("文件路径:"+cfile.toString()); CSVReader reader = new CSVReader(new FileReader(cfile.toString()),'\t'); 而 ((nline=reader.readNext())!=null) data.put(nline[0],Double.parseDouble(nline[1])); // 加载到哈希图中 } 捕获(异常 e) {// 处理异常 }

帮助表示赞赏。

干杯!

【问题讨论】:

  • 如果您在使用分布式缓存时不共享部分代码,则很难找出问题所在。
  • /app/hadoop/jobs/nw_single_pred_in/predict 这是文件的绝对路径还是文件所在的目录?
  • @shazin 文件所在的HDFS目录
  • @CharlesMenguy 添加了代码。请看帖子。

标签: hadoop mapreduce


【解决方案1】:

全新安装 hadoop 并使用相同的 jar 运行作业,问题消失了。似乎是一个错误而不是编程错误。

【讨论】:

    猜你喜欢
    • 2016-08-06
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多