Объекты из памяти в качестве входных данных для Hadoop / MapReduce? - PullRequest
0 голосов
/ 09 февраля 2011

Я работаю над алгоритмом распараллеливания, который примерно выполняет следующие действия:

  1. Чтение нескольких текстовых документов общим объемом 10 тыс. Слов.
  2. Создание объектов для каждого словав текстовом корпусе.
  3. Создать пару между всеми слово-объектами (да, O (n)).И вернуть наиболее часто встречающиеся пары.

Я хотел бы распараллелить шаг 3., создав пары между первыми 1000 объектами слов, остальными на первой машине, вторыми 1000 объектами слов наследующий компьютер и т. д.

Мой вопрос: как передать объекты, созданные в шаге 2., в Mapper?Насколько я знаю, мне потребуются входные файлы для этого и, следовательно, потребуется сериализовать объекты (хотя раньше это не работало).Есть ли прямой способ передать объекты в Mapper?

Заранее спасибо за помощь

Евгений

ОБНОВЛЕНИЕ Спасибо, что прочитали моивопрос раньше.Сериализация, кажется, лучший способ решить эту проблему (см. Java.io.Serializable).Кроме того, я нашел этот учебник полезным для чтения данных из сериализованных объектов в hadoop: http://www.cs.brown.edu/~pavlo/hadoop/).

Ответы [ 2 ]

0 голосов
/ 24 февраля 2011

Используйте twitter protobufs ( elephant-bird ).Конвертируйте каждое слово в объект protobuf и обрабатывайте его как хотите.Кроме того, protobufs намного быстрее и легче по сравнению с Java-сериализацией по умолчанию.Обращайтесь к презентации Кевина Вейля по этому вопросу.http://www.slideshare.net/kevinweil/protocol-buffers-and-hadoop-at-twitter

0 голосов
/ 09 февраля 2011

Как насчет распараллеливания всех шагов?Используйте текстовые документы № 1 в качестве входных данных для вашего Mapper.Создайте объект для каждого слова в Mapper.В Mapper вашей парой ключ-значение будет пара слово-объект (или объект-слово в зависимости от того, что вы делаете).Затем редуктор может подсчитать уникальные пары.

Hadoop позаботится о том, чтобы собрать все одинаковые ключи вместе в одном редукторе.

...