Hadoop Partitioner: узнайте о введении, синтаксисе, реализации

Опубликовано: 2020-05-14

Основная цель этого руководства по Hadoop Partitioner — дать вам пошаговое определение каждой части, используемой в Hadoop. В этом посте мы рассмотрим значение Hadoop Partitioner, потребность в Partitioner в Hadoop и неудачный случай разделения Hadoop.

Давайте разберемся, что такое Hadoop Partitioner.

Оглавление

Что такое Partitioner в Hadoop?

Partitioner позволяет распространять информацию о том, как выходные данные попадают с этапа карты на редьюсеры.

Partitioner управляет ключевым сегментом вывода средней карты. Ключ или подмножество ключа используется для определения раздела с помощью хеш-функции.

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

Раздел работает на выходе маппера в зависимости от значения ключа. Одно и то же значение ключа входит в один и тот же раздел в каждом преобразователе. После этого процесса окончательный раздел отправляется на редюсер.

Класс раздела решает, куда пойдет пара ключа и значения. Фаза разделения приходится на середину карты и фазы сокращения.

Давайте посмотрим, зачем нужен Hadoop Partitioner.

Для чего нужен разделитель Hadoop?

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

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

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

Читайте : Заработная плата разработчиков Hadoop в Индии

Синтаксис Hash Partitioner в Hadoop

Вот синтаксис по умолчанию разделителя хэшей в Hadoop.

public int getPartition (ключ K, значение V

int numReduceTasks)

{

return(key.hashCode() & Integer.MAX_VALUE) % numRedudeTasks;

}

Реализация Hadoop Partitioner

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

Номер квартиры Имя Пол Члены семьи Счет за электричество
1101 Маниша Женский 3 1500
1102 Дипак Мужчина 4 2000 г.
1103 Санджай Мужчина 3 1100
1104 Нидхи Женский 2 900
1105 Пратик Мужчина 1 650
1106 Гопал Мужчина 4 1800
1107 Самикша Женский 2 1300

Теперь давайте напишем программу для нахождения самых высоких счетов за электроэнергию по полу в разных группах членов семьи — от 2 до 3 и ниже 4.

Указанные данные сохраняются как input.txt в каталоге «/home/Hadoop/HadoopPartitioner».

Ключ следует шаблону — специальный ключ + имя файла + номер строки. Например,

ключ = ввод@1

Для этого значение будет

значение = 1101 \t Маниша \t Самка \t 3 \t 1500

Вот как будет проходить операция:

  • Чтение значения
  • Используйте функцию разделения для разделения полов и сохранения их в строковой переменной.

String[] str = value.toString().split("\t", -2);

Пол строки = str[2];

  • Теперь отправьте информацию о поле и запишите значение данных в виде пары лей и значений в задачу разделения.

context.write (новый текст (пол), новый текст (значение));

  • Повторить для всех записей

На выходе вы получите отсортированные гендерные данные и значение данных в виде пар ключ-значение.

Вот как будет проходить задача разделения.

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

Вход

ключ = значение поля пола

значение = значение записи этого пола

Вот как будет происходить процесс.

  • Чтение значения члена семьи из пары ключ-значение

String[] str = value.toString().split("\t");

int age = Integer.parseInt(str[3]);

  • Проверьте значение членов семьи со следующими условиями
  • Члены семьи от 2 до 3
  • Члены семьи менее 4

если(члены семьи<4)

{

вернуть 0;

}

иначе если (члены семьи>=2 && члены семьи<=3)

{

вернуть 1 % numReduceTasks;

}

еще

{

вернуть 2 % numReduceTasks;

}

Выход

Данные пар ключ-значение будут сегментированы на три заданные коллекции.

Также узнайте: Лучшие инструменты Hadoop, о которых вы должны знать

Плохое разбиение и его преодоление

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

Итак, теперь у вас есть два механизма отправки информации в разделы:

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

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

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

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

Заключение

Мы надеемся, что это руководство по Hadoop Partitioners было полезным для вас. Для получения дополнительной информации по этому вопросу свяжитесь с экспертами upGrad, и мы поможем вам пройти через это.

Если вам интересно узнать больше о больших данных, ознакомьтесь с нашей программой PG Diploma в области разработки программного обеспечения со специализацией в области больших данных, которая предназначена для работающих профессионалов и включает более 7 тематических исследований и проектов, охватывает 14 языков и инструментов программирования, практические занятия. семинары, более 400 часов интенсивного обучения и помощь в трудоустройстве в ведущих фирмах.

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Освойте технологии будущего — большие данные

Расширенная программа сертификации в области больших данных от IIIT Bangalore