0

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)
    {//例外を処理する}

感謝します。

乾杯 !

4

1 に答える 1

0

Hadoop の新規インストールを行い、同じ jar でジョブを実行すると、問題はなくなりました。プログラミングエラーではなく、バグのようです。

于 2013-02-10T15:22:32.107 に答える