Зависимости сторонних библиотек Hadoop от локальных файлов

Итак, я работаю над проектом Hadoop, в котором широко используются некоторые сторонние библиотеки, которые полагаются на наличие небольших локальных файлов. Многие из них являются конфигурационными файлами, хотя один из них представляет собой файл словаря размером 34 МБ. По сути, я пытаюсь обернуть библиотеку для работы с гораздо большими входными и выходными данными. Речь идет о следующих библиотеках: s-match и WordNet JWNL.

Каков правильный способ убедиться, что эти файлы меньшего размера доступны узлам картографа и редуктора локально во время выполнения?

Альтернативой является широкое изменение сторонних библиотек, чего я, очевидно, предпочел бы избежать. Конечно, должен быть способ упаковывать и распространять эти файлы в локальные файловые системы, избегая необходимости чтения заданий MR исключительно из HDFS и/или специальных объектов.


person Axel Magnuson    schedule 29.11.2013    source источник


Ответы (1)


Самый стандартный способ сделать это — добавить эти файлы в распределенный кеш. Вот статья о том, как работает распределенный кеш. По сути, если вы используете ванильный API Hadoop, вы можете добавлять файлы в распределенный кеш через свой JobConf.

 JobConf job = new JobConf();
 DistributedCache.addCacheFile(new URI("myfile.txt"),job);

Если вы используете uberjar для выполнения своей работы, вы также можете просто отправить их в путь к классам uberjar, но это немного грязнее и увеличит размер вашего jar-файла.

person Paul Sanwald    schedule 29.11.2013