2014-02-22 2 views
0

У меня есть два файла. Я хочу, чтобы один файл находился в распределенном кэше, а другой - для отправки в mapper.Использование динамического распределенного кэша в Hadoop

Но тот, который находится в распределенном кэше, является очень большим файлом. То, что я планирую, состоит в том, чтобы разделить этот файл с помощью картографа, а затем отправить блоки параллельно другому процессу карты.

Любая идея, как реализовать это.

ответ

0

Прежде всего, причина, по которой распределенный кеш существует, заключается в том, что все картографы имеют (чтение) доступ к общему файлу, например. список стоп-слов. Если вам это не нужно, вам не нужен распределенный кэш. Кроме того, если два файла, которые вы описываете, имеют один формат, и вы обрабатываете их одинаково, просто передайте их корневой каталог (ы) в качестве ввода в свой картограф. Hadoop будет обрабатывать оба из них одинаково и разделить их обоих. Если это не так, продолжайте читать мой ответ.

Если вы хотите использовать вывод первого картографа в качестве (одного) входа второго устройства отображения, вы можете использовать ChainMapper.

Но я предполагаю, что вы также хотите использовать второй входной файл. Итак, вы можете split your job in a chain of two jobs. Тогда входное устройство второго задания может быть комбинацией обоих входных файлов: выход первого задания и файла, если они находятся в одном формате. По этой причине вы можете использовать метод addInputPath.

В противном случае вы можете получить файл непосредственно из файловой системы, как описано here.

Обратите внимание, что если ваш большой файл больше размера блока (по умолчанию 64 МБ), и он сплиттивен, hasoop разбивает его «автоматически», когда он задается в качестве ввода для картографа.

+0

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

+0

Простым примером является программа проверки орфографии. У меня есть файл для проверки на ошибку заклинания. и у меня есть файл словаря, который будет использоваться в качестве кеша dist. Но файл словаря очень большой. Поэтому я хочу разделить файл словаря на 10 подфайлов. предположим, что у меня есть фаза отображения карты, в которой каждый из 4-х карточек работает с одним блоком файла проверки орфографии. я хочу отправить все словарные файлы-словаря каждому картографу один за другим. – Pooja3101

+0

Затем используйте последний вариант из моих предложений и получите каждый блок непосредственно из файловой системы. Разделение файла на большее количество файлов не нужно делать в hadoop. – vefthym

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