Hadoop: что следует отображать, а что уменьшать? - PullRequest
1 голос
/ 30 сентября 2011

Я впервые использую карту / уменьшить.Я хочу написать программу, которая обрабатывает большой файл журнала.Например, если я обрабатываю файл журнала, в котором есть записи, состоящие из {Student, College и GPA}, и мне нужно отсортировать всех студентов по колледжу, что будет частью «карты», а что будет «уменьшить»?У меня возникли некоторые трудности с концепцией, несмотря на то, что я прочитал несколько учебных пособий и примеров.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Yahoo имеет отсортированных байт данных Peta и Tera.Другие (в том числе Google ) делают это на регулярной основе, вы можете искать критерии сортировки в Интернете.Yahoo опубликовала статью о том, как они это сделали.

Необходимо немного изменить подход Рэя, чтобы отсортировать окончательный результат.Входные данные должны быть сэмплированы и записан пользовательский раздел для отправки диапазона ключей конкретному преобразователю.Тогда выход N редукторов просто необходимо объединить.В статье Yahoo объясняется, что это более подробно.

В пакете 'org.apache.hadoop.examples.terasort' есть пример кода для сортировки данных.

Если вы новичок в MapReduce, я предлагаю посмотретьследующие видео.Они немного длинны, но стоят.

http://www.youtube.com/watch?v=yjPBkvYh-ss
http://www.youtube.com/watch?v=-vD6PUdf3Js
http://www.youtube.com/watch?v=5Eib_H_zCEY
http://www.youtube.com/watch?v=1ZDybXl212Q
http://www.youtube.com/watch?v=BT-piFBP4fE

Редактировать: Более подробную информацию можно найти в блоге Cloudera здесь .Есть несколько встроенных классов для упрощения сортировки.

Общее количество разделов заказа HADOOP-3019 .В дополнение к записи TeraSort, Hadoop теперь имеет библиотечные классы для эффективного вывода глобально отсортированного вывода.InputSampler используется для выборки подмножества входных данных, а затем TotalOrderPartitioner используется для разделения выходных данных карты на приблизительно равные по размеру разделы.Очень аккуратный материал - стоит посмотреть, даже если вам не нужно его использовать.

2 голосов
/ 30 сентября 2011

Технически говоря, Hadoop MapReduce рассматривает все как пары ключ-значение; вам просто нужно определить, какие ключи и какие значения. Подписи карты и уменьшения

map: (K1 x V1) -> (K2 x V2) list
reduce: (K2 x V2) list -> (K3 x V3) list

с сортировкой по значениям K2 в промежуточной фазе тасования между картой и уменьшением.

Если ваши входные данные имеют форму

Student x (College x GPA)

Тогда ваш маппер не должен делать ничего, кроме как передать значения College для ключа:

map: (s, c, g) -> [(c, s, g)]

с колледжем в качестве нового ключа, Hadoop будет сортировать по колледжу для вас. Тогда ваш редуктор - просто старый «редуктор идентификации».

Если на практике вы выполняете операцию сортировки (то есть это не домашняя работа), проверьте Улей или Свинья . Эти системы значительно упрощают такие задачи. Сортировка по определенному столбцу становится довольно тривиальной. Тем не менее, всегда полезно написать, скажем, потоковое задание hadoop для задач, подобных той, что вы определили здесь, чтобы лучше понять мапперы и редукторы.

...