Hadoop MapReduce Join & Counter із прикладом
Що таке Join у Mapreduce?
Mapreduce Приєднатися Операція використовується для об'єднання двох великих наборів даних. Однак цей процес передбачає написання великої кількості коду для виконання фактичної операції приєднання. Об’єднання двох наборів даних починається з порівняння розміру кожного з них. Якщо один набір даних менший порівняно з іншим набором даних, тоді менший набір даних поширюється на кожен вузол даних у кластері.
Після того, як об’єднання в MapReduce розподілено, Mapper або Reducer використовує менший набір даних, щоб виконати пошук відповідних записів із великого набору даних, а потім об’єднати ці записи для формування вихідних записів.
Типи приєднання
Залежно від місця, де виконується фактичне об’єднання, об’єднання в Hadoop класифікуються на:
1. Об’єднання на стороні карти – Коли об’єднання виконується картографом, воно називається об’єднанням на стороні карти. У цьому типі об’єднання виконується до того, як дані фактично споживаються функцією map. Обов’язково, щоб вхідні дані для кожної карти були у формі розділу та були відсортовані. Крім того, має бути однакова кількість розділів, і вони повинні бути відсортовані за ключем об’єднання.
2. З’єднання з боку зменшення – Коли об’єднання виконується редуктором, воно називається об’єднанням на стороні зменшення. У цьому об’єднанні немає необхідності мати набір даних у структурованому вигляді (або розділеному).
Тут обробка на стороні карти видає ключ об’єднання та відповідні кортежі обох таблиць. Як результат цієї обробки, усі кортежі з однаковим ключем об’єднання потрапляють в той самий редуктор, який потім об’єднує записи з однаковим ключем об’єднання.
Загальний процес об’єднання в Hadoop зображено на схемі нижче.

Як об’єднати два набори даних: приклад MapReduce
Є два набори даних у двох різних файлах (показано нижче). Key Dept_ID є загальним для обох файлів. Мета полягає в тому, щоб використовувати MapReduce Join для об’єднання цих файлів


Вхідний сигнал: Вхідним набором даних є текстовий файл, DeptName.txt і DepStrength.txt
Завантажте вхідні файли звідси
Переконайтеся, що Hadoop встановлено. Перш ніж розпочати фактичний процес прикладу MapReduce Join, змініть користувача на «hduser» (ідентифікатор, який використовується під час конфігурації Hadoop, ви можете переключитися на ідентифікатор користувача, який використовується під час конфігурації Hadoop).
su - hduser_
Крок 1) Скопіюйте файл zip у вибране вами місце
Крок 2) Розпакуйте файл Zip
sudo tar -xvf MapReduceJoin.tar.gz
Крок 3) Перейти до каталогу MapReduceJoin/
cd MapReduceJoin/
Крок 4) Запустіть Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Крок 5) DeptStrength.txt і DeptName.txt є вхідними файлами, які використовуються для прикладу програми MapReduce Join.
Ці файли потрібно скопіювати в HDFS за допомогою наведеної нижче команди-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Крок 6) Запустіть програму за допомогою команди нижче-
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Крок 7) Після виконання вихідний файл (з назвою "part-00000") буде збережено в каталозі /output_mapreducejoin на HDFS
Результати можна побачити за допомогою інтерфейсу командного рядка
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Результати також можна побачити через веб-інтерфейс як-
Тепер виберіть «Переглянути файлову систему» і перейдіть до /output_mapreducejoin
відкритий частина-р-00000
Показуються результати
ПРИМІТКА: Зауважте, що перед наступним запуском цієї програми вам потрібно буде видалити вихідний каталог /output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Альтернативою є використання іншої назви вихідного каталогу.
Що таке лічильник у MapReduce?
A Лічильник у MapReduce це механізм, який використовується для збору та вимірювання статистичної інформації про завдання та події MapReduce. Лічильники відстежують різноманітну статистику завдань у MapReduce, наприклад кількість виконаних операцій і хід виконання операції. Лічильники використовуються для діагностики проблем у MapReduce.
Лічильники Hadoop подібні до розміщення повідомлення журналу в коді карти чи зменшення. Ця інформація може бути корисною для діагностики проблеми в обробці завдань MapReduce.
Як правило, ці лічильники в Hadoop визначаються в програмі (відображення або скорочення) і збільшуються під час виконання, коли відбувається певна подія або умова (специфічна для цього лічильника). Дуже хорошим застосуванням лічильників Hadoop є відстеження дійсних і недійсних записів із вхідного набору даних.
Типи лічильників MapReduce
В основному існує 2 види MapReduce Лічильники
- Вбудовані лічильники Hadoop:Є кілька вбудованих лічильників Hadoop, які існують для кожного завдання. Нижче наведено вбудовані групи лічильників-
- Лічильники завдань MapReduce – Збирає інформацію про завдання (наприклад, кількість вхідних записів) під час його виконання.
- Лічильники файлової системи – Збирає інформацію, як-от кількість байтів, прочитаних або записаних завданням
- Лічильники FileInputFormat – Збирає інформацію про кількість байтів, прочитаних через FileInputFormat
- Лічильники FileOutputFormat – Збирає інформацію про кількість байтів, записаних через FileOutputFormat
- Лічильники вакансій – Ці лічильники використовує JobTracker. Зібрана ними статистика включає, наприклад, кількість завдань, запущених для роботи.
- Визначені користувачем лічильники
Окрім вбудованих лічильників, користувач може визначати власні лічильники, використовуючи аналогічні функції, які надає мови програмування. Наприклад, в Java 'enum' використовується для визначення визначених користувачем лічильників.
Приклад лічильників
Приклад MapClass із лічильниками для підрахунку кількості відсутніх і недійсних значень. Файл вхідних даних, який використовується в цьому підручнику Наш набір вхідних даних – це файл CSV, SalesJan2009.csv
public static class MapClass extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> { static enum SalesCounters { MISSING, INVALID }; public void map ( LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException { //Input string is split using ',' and stored in 'fields' array String fields[] = value.toString().split(",", -20); //Value at 4th index is country. It is stored in 'country' variable String country = fields[4]; //Value at 8th index is sales data. It is stored in 'sales' variable String sales = fields[8]; if (country.length() == 0) { reporter.incrCounter(SalesCounters.MISSING, 1); } else if (sales.startsWith("\"")) { reporter.incrCounter(SalesCounters.INVALID, 1); } else { output.collect(new Text(country), new Text(sales + ",1")); } } }
Наведений вище фрагмент коду показує приклад реалізації лічильників у Hadoop Map Reduce.
Тут, Прилавки продажів це лічильник, визначений за допомогою 'enum'. Він використовується для підрахунку ВІДСУТНІЙ та INVALID вхідні записи.
У фрагменті коду, якщо "країна" поле має нульову довжину, тоді його значення відсутнє, а отже, і відповідний лічильник Прилавки продажу. ВІДСУТНІ збільшується.
Далі, якщо продажі поле починається з a " тоді запис вважається НЕДІЙСНИМ. На це вказує лічильник, що збільшується SalesCounters.INVALID.