Подтвердить что ты не робот

Карта hadoop уменьшает вторичную сортировку

Может ли кто-нибудь объяснить мне, как вторичная сортировка работает в hadoop?
Зачем использовать GroupingComparator и как он работает в hadoop?

Я просматривал приведенную ниже ссылку и сомневался в том, как работает groupcompator.
Может ли кто-нибудь объяснить мне, как работает компаратор сравнения?

http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html

4b9b3361

Ответ 1

Группирующий компаратор

Как только данные достигнут редуктора, все данные сгруппированы по ключу. Поскольку у нас есть составной ключ, нам нужно убедиться, что записи сгруппированы исключительно с помощью естественного ключа. Это достигается путем написания пользовательского GroupPartitioner. У нас есть объект Comparator, только учитывая поле YearMonth класса TemperaturePair для группировки записей вместе.

public class YearMonthGroupingComparator extends WritableComparator {

    public YearMonthGroupingComparator() {
        super(TemperaturePair.class, true);
    }

    @Override
    public int compare(WritableComparable tp1, WritableComparable tp2) {
        TemperaturePair temperaturePair = (TemperaturePair) tp1;
        TemperaturePair temperaturePair2 = (TemperaturePair) tp2;
        return temperaturePair.getYearMonth().compareTo(temperaturePair2.getYearMonth());
    }
}

Ниже приведены результаты выполнения нашего вторичного задания сортировки:

new-host-2:sbin bbejeck$ hdfs dfs -cat secondary-sort/part-r-00000

190101 -206

190102 -333

190103 -272

190104 -61

190105 -33

190106 44

190107 72

190108 44

190109 17

190110 -33

190111 -217

190112 -300

В то время как сортировка данных по значению может быть не общей потребностью, ее хороший инструмент, чтобы иметь в заднем кармане, когда это необходимо. Кроме того, мы смогли глубже изучить внутреннюю работу Hadoop, работая с пользовательскими разделителями и разделителями групп. См. Также эту ссылку. Что такое использование компаратора группировки в карте hadoop уменьшить

Ответ 2

Мне легко понять некоторые понятия с помощью диаграмм, и это, безусловно, один из них.

Предположим, что наша вторичная сортировка находится на составном ключе, состоящем из имени и имени.

Composite Key

С составным ключом в сторону, теперь рассмотрим механизм вторичной сортировки

Secondary Sorting Steps

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

Обзор шагов MR

enter image description here

Ответ 3

Вот пример для группировки. Рассмотрим составной ключ (a, b) и его значение v. И пусть предположим, что после сортировки вы, в частности, получите следующую группу пар (ключ, значение):

(a1, b11) -> v1
(a1, b12) -> v2
(a1, b13) -> v3

С помощью группового компаратора по умолчанию структура вызовет функцию reduce 3 раза с соответствующими парами (ключ, значение), поскольку все ключи различны. Однако, если вы предоставляете свой собственный собственный компаратор групп и определяете его так, чтобы он зависел только от a, игнорируя b, тогда фреймворк завершает, что все ключи в этой группе равны и вызывает функцию уменьшения только один раз, используя следующий ключ и список значений:

(a1, b11) -> <v1, v2, v3> 

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

В известном примере из книги "Hadoop", вычисляющей максимальную температуру по годам, a - год, а b - температуры, отсортированные в порядке убывания, таким образом b11 - желаемая максимальная температура, t заботиться о других b 's. Функция уменьшения просто записывает полученные (a1, b11) в качестве решения для этого года.

В вашем примере с сайта "bigdataspeak.com" все b требуются в редукторе, но они доступны как части соответствующих значений (объектов) v.

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

Надеюсь, что это поможет.

Ответ 4

Разделитель просто гарантирует, что один редуктор получает все записи, принадлежащие ключу, но он не меняет того факта, что редукторы группируются по ключевым разделам.

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

Итак, нам нужно контролировать группировку. Следовательно, мы должны указывать структуре для группировки на основе естественной части ключа, а не сложного ключа. Следовательно, компаратор сравнения должен использоваться для того же самого.

Ответ 5

Выше упоминание примеров имеет хорошее объяснение, позвольте мне упростить его. Нам нужно выполнить три основных шага.

  • Mapout должен быть (ключ + значение, значение)
  • Когда мы присоединились к Key & Value. Тем не менее нам нужно иметь механизм для сортировки по исходному ключу, а также по значению. Поэтому мы добавим пользовательский компаратор.
  • Теперь данные сортируются по исходному ключу, но если мы отправим эти данные в редуктор, это не гарантирует отправку всего значения заданного ключа на один редуктор, поскольку мы используем ключ + значение в качестве ключа. Чтобы убедиться в этом, мы добавим групповой компаратор.