Я пытаюсь поместить файл в распределенный кеш. Для этого я вызываю свой класс драйвера, используя параметр -files, что-то вроде:
hadoop jar job.jar my.driver.class -files MYFILE input output
getCacheFiles()
и getLocalCacheFiles()
возвращают массивы URI/путей, содержащих MYFILE. (Например: hdfs://localhost/tmp/hadoopuser/mapred/staging/knappy/.staging/job_201208262359_0005/files/histfile#histfile)
К сожалению, при попытке получить MYFILE в задаче карты выдается ошибка FileNotFoundException
.
Я пробовал это в автономном (локальном) режиме, а также в псевдораспределенном режиме.
Вы знаете, что может быть причиной?
ОБНОВЛЕНИЕ:
Следующие три строки:
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.xml mapred.cache.files
, и локальный файл, похоже, присутствует. Тем не менее, возникает FileNotFoundException.