2012-06-05 2 views
0

Я пишу программу Java MapReduce в Hadoop, и каждый редуктор должен иметь доступ к статическому XML-файлу (который содержит некоторую бизнес-логику о применении правил к спискам значений). Я решил сохранить этот файл в распределенном кеше, а затем использовать API распределенного кеша для его доступа (сериализовать его) в каждом редукторе. Я еще не реализовал это, но API выглядит просто, когда дело доходит до использования этой функции в HDFS/распределенном режиме. Однако можно ли использовать его в псевдораспределенном автономном режиме для моих целей тестирования? Как это сработает?Могу ли я использовать распределенный кэш Hadoop в автономном режиме?

Кроме того, это плохая идея сериализации файла в каждом редукторе? Я открыт для предложений по другим способам распространения «глобальных статических данных» на редукторы.

Спасибо!

+0

Посмотрите это - http://stackoverflow.com/questions/3210222/distributed-cache. Да Распределенный кеш предназначен для того, чтобы сделать доступными некоторые данные для всех задач. –

ответ

1

Да, вы можете - это будет работать так же, как в реальном кластере.

Это хорошая идея использовать распределенный кеш, если он не фиксирован. Другая альтернатива заключается в том, чтобы упаковать эти данные в банку, которая содержит код задания, в этом случае она не будет столь же гибкой, когда вам придется изменить XML (вы все равно можете изменить банку, но это не простой способ сделать это)

+0

Thanks Arnon. Какой размер файлов данных вы скажете, используя распределенный кеш, становится плохой идеей? Я буду хранить файл, содержащий примерно 140 тыс. Строк (20 МБ), которые будут искать мапперы и редукторы. Я загружу его (через BufferedReader) в HashMap в методе configure() Mapper или Reducer, чтобы каждый вызов map() мог искать в нем элемент. Является ли это нормальным использованием распределенного кеша (или злоупотребления)? – wsb3383

+0

Вы можете просто измерить свою производительность - но, на мой взгляд, это выглядит разумно. Если вы храните информацию где-то еще (настоящий распределенный кеш, такой как memcached, hbase и т. Д.), Ваши затраты на ввод-вывод будут выше - как и в распределенном кеше hadoop, файл является копиями только один раз на машину, где в других вариантах каждая карта будет читать файл поверх сеть. –

+0

Я пытаюсь использовать DistributedCache в автономной среде. Я могу добавить файлы и не бросать никаких исключений. Когда я пытаюсь получить файлы, он бросает нуль. Вы можете помочь здесь? –

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