2014-11-28 2 views
1

В настоящее время я использую структуру MAP-REDUCE YARN. И использование hadoop в псевдораспределенном режиме. Я хочу использовать функцию «Распределенный кеш» здесь, чтобы добавить некоторые файлы в кеш и использовать их в моей функции карты. Как я могу это достичь.Функция распределенного кэша в YARN

ответ

1

Как добавить файлы в распределенной кэш:

  • Использование опции Hadoop

.

hadoop jar <application jar> <main class> <input> <output> -files <absolute path to distributed cache file> 
  • с использованием распределенного кэша API:

.

job.addCacheFile(uri); 

Hadoop -файлы вариант или распределенный кэш API копируют файлы кэша для всех узлов задачи и сделать его доступным для картографа/редуктора во время выполнения.

Как получить доступ к распределенной кэш:

Override метод установки в Mapper/редукторе и вызвать getCacheFiles из контекста. Пример кода ниже:

@Override 
    protected void setup(Context context) 
      throws IOException, InterruptedException { 

     Path[] localPaths = context.getCacheFiles(); 
     if (localPaths.length == 0) { 
      throw new FileNotFoundException("Distributed cache file not found."); 
     } 
     File localFile = new File(localPaths[0].toString()); 
     // code to process cache file 

    } 

метод context.getCacheFiles возвращает массив URI файлов, установленных в конфигурации.

+0

Он бросает «filenotfound execption». Пожалуйста, помогите мне с этим. –

+0

Пожалуйста, посмотрите пример реализации распределенного кэша: https://github.com/tomwhite/hadoop-book/blob/master/ch08/src/main/java/MaxTemperatureByStationNameUsingDistributedCacheFileApi.java –

+0

@VijayInnamuri Это мертвая ссылка. Можете ли вы разместить новый? – AST

Смежные вопросы