2013-02-28 2 views
0

У меня есть запись в каждой строке ввода, и каждая запись содержит около 10 полей. Во-первых, я группирую записи по трем полям (field1, field2, field3), поэтому один картограф/редуктор отвечает за одну уникальную группу (на основе трех полей). В каждой группе я сортирую записи на основе другого целочисленного поля timestamp, и я помещаю каждую запись в группу тем же тегом aTag, добавляя другое поле.Hadoop map-reduce: порядок записей при группировке

Допустим, что в картографа # 1, пометить отсортированный группу как aTag и картографа # 2, я помечать другую группу (другую группу, потому что я изначально сгруппированных записей на основании трех полей) с тем же тегом aTag ,

Теперь, если я группирую записи на основе поля тега (т. Е. Группируя группы в разных картографах), я замечаю, что упорядочение внутри каждой группы больше не сохраняется. Я ожидал, что, поскольку у каждого картографа есть группа со всеми записями, имеющими один и тот же тег, группировка по имени тега должна включать в себя привлечение соответствующих групп из других картографов и просто их объединение без повторной упорядочивания каждой отдельной группы.

Это потому, что я пытаюсь сохранить записи в формате gzip и, следовательно, пытается переупорядочить записи для лучшего сжатия? Также я хотел бы знать, как сохранить заказ после группировки по имени тега.

ответ

2

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

  1. Вы не должны делать сортировку себя
  2. Вы не кончатся памяти на одной машине, пытаясь разобраться в самом деле большую группу.

Кажется, в вашем случае, что вы хотите добавить timestamp к набору ключей, скажи разметить на первых трех ключей, и сказать ему, чтобы разобраться на метку времени.

Для получения дополнительной информации см следующей диаграммы и Where is Sort used in MapReduce phase and why?

enter image description here

+0

Спасибо @ Андрей. На самом деле я запускаю задания со свиным сценарием. Я решил проблему, снова сортируя записи на основе трех полей, используя вложенные для каждой конструкции. 'B = группа A по тегу; C = foreach B { sorted = sort A по полю1, field2, field3; Производите сплющивание (отсортировано); } ' – sachin2182