分散キャッシュにファイルを配置しようとしています。これを行うために、次のような-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がスローされます。