在我的地图函数中,我试图从分布式缓存中读取一个文件,将其内容加载到哈希映射中。
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) {// 处理异常 }
帮助表示赞赏。
干杯!