1

分散キャッシュにファイルを配置しようとしています。これを行うために、次のような-filesオプションを使用してドライバークラスを呼び出します。

   hadoop jar job.jar my.driver.class -files MYFILE input output

MYFILEを含むURI/パスの配列と戻り値getCacheFiles()getLocalCacheFiles()(例:hdfs:// localhost / tmp / hadoopuser / mapred / staging / knappy / .staging / job_201208262359_0005 / files / histfile#histfile)

残念ながら、マップタスクでMYFILEを取得しようとすると、がスローされますFileNotFoundException

スタンドアロン(ローカル)モードと疑似分散モードでこれを試しました。

原因が何であるか知っていますか?

アップデート:

次の3行:

System.out.println("cache files:"+ctx.getConfiguration().get("mapred.cache.files"));
uris = DistributedCache.getLocalCacheFiles(ctx.getConfiguration());
for(Path uri: uris){

      System.out.println(uri.toString());
      System.out.println(uri.getName());
      if(uri.getName().contains(Constants.PATH_TO_HISTFILE)){
       histfileName = uri.getName();
      }
} 

これを印刷してください:

cache files:file:/home/knappy/histfile#histfile

/tmp/hadoop-knappy/mapred/local/archive/-7231_-1351_105/file/home/knappy/histfile

histfile

したがって、ファイルはjob.xmlmapred.cache.filesプロパティにリストされているようであり、ローカルファイルが存在しているようです。それでも、FileNotFoundExceptionがスローされます。

4

1 に答える 1

1

まずmapred.cache.files、ジョブのxmlをチェックインして、ファイルがキャッシュにあるかどうかを確認します。マッパーで取得できます。

...
Path[] files = DistributedCache.getLocalCacheFiles(context.getConfiguration());
File myFile = new File(files[0].getName());
//read your file content
...
于 2012-08-28T12:35:15.223 に答える