Hadoop DistributedCache - FileNotFound

Я пытаюсь поместить файл в распределенный кеш. Для этого я вызываю свой класс драйвера, используя опцию -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 выбрасывается.

1 ответ

Решение

Первая проверка mapred.cache.files в xml вашей работы, чтобы увидеть, находится ли файл в кеше. Вы можете получить его в вашем картографе:

...
Path[] files = DistributedCache.getLocalCacheFiles(context.getConfiguration());
File myFile = new File(files[0].getName());
//read your file content
...
Другие вопросы по тегам