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().
Итак, теперь у вас есть два механизма отправки информации в разделы:
- Во-первых, ключ, отображаемый больше, будет отправлен в один раздел
- Во-вторых, все оставшиеся ключи будут отправлены в разделы в соответствии с их hashCode().
Теперь предположим, что ваш метод hashCode() не обеспечивает надлежащего распределения других ключей по разделам. Таким образом, информация неравномерно распределяется по разделам и редюсерам. Это связано с тем, что каждый раздел пропорционален редюсеру.

Таким образом, некоторые редьюсеры будут иметь больший объем данных, чем другие редьюсеры. Следовательно, оставшимся редукторам придется ждать одного редюсера (одного с пользовательскими ключами) из-за имеющейся нагрузки.
В этом случае вы должны следовать методологии, которая будет использовать данные для разных редюсеров. Узнайте больше о Hadoop из нашего окончательного руководства по Hadoop.
Заключение
Мы надеемся, что это руководство по Hadoop Partitioners было полезным для вас. Для получения дополнительной информации по этому вопросу свяжитесь с экспертами upGrad, и мы поможем вам пройти через это.
Если вам интересно узнать больше о больших данных, ознакомьтесь с нашей программой PG Diploma в области разработки программного обеспечения со специализацией в области больших данных, которая предназначена для работающих профессионалов и включает более 7 тематических исследований и проектов, охватывает 14 языков и инструментов программирования, практические занятия. семинары, более 400 часов интенсивного обучения и помощь в трудоустройстве в ведущих фирмах.
Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.
