map関数内で、distributedcacheからファイルを読み取り、その内容をハッシュマップにロードしようとしています。
MapReduceジョブのsys出力ログは、ハッシュマップの内容を出力します。これは、ファイルが検出され、データ構造にロードされ、必要な操作が実行されたことを示しています。リストを繰り返し、その内容を出力します。したがって、操作が成功したことを証明します。
ただし、MRジョブを数分間実行した後でも、以下のエラーが発生します。
13/01/27 18:44:21 INFO mapred.JobClient:タスクID:attempt_201301271841_0001_m_000001_2、ステータス:FAILED 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)で
これは、分散キャッシュに配置されるファイルの場所でパスを初期化する部分です。
// main内、try catchブロックに囲まれていますが、ここでは例外はスローされません 構成conf=new Configuration(); //confに関連する残りのもの パスknowledgefilepath=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); //残りのジョブ設定 job.waitForCompletion(true); //ロードを開始します
これはmap関数内にあります:
試す { System.out.println( "Inside try !!"); パスfiles[]= DistributedCache.getLocalCacheFiles(context.getConfiguration()); パスcfile=new Path(files [0] .toString()); //1つのファイルのみ System.out.println( "ファイルパス:" + cfile.toString()); CSVReaderリーダー=新しいCSVReader(new FileReader(cfile.toString())、'\ t'); while((nline = reader.readNext())!= null) data.put(nline [0]、Double.parseDouble(nline [1])); //ハッシュマップにロードします } キャッチ(例外e) {//例外を処理する}
感謝します。
乾杯 !