Hadoop MapReduce Join & Counter із прикладом

Що таке Join у Mapreduce?

Mapreduce Приєднатися Операція використовується для об'єднання двох великих наборів даних. Однак цей процес передбачає написання великої кількості коду для виконання фактичної операції приєднання. Об’єднання двох наборів даних починається з порівняння розміру кожного з них. Якщо один набір даних менший порівняно з іншим набором даних, тоді менший набір даних поширюється на кожен вузол даних у кластері.

Після того, як об’єднання в MapReduce розподілено, Mapper або Reducer використовує менший набір даних, щоб виконати пошук відповідних записів із великого набору даних, а потім об’єднати ці записи для формування вихідних записів.

Типи приєднання

Залежно від місця, де виконується фактичне об’єднання, об’єднання в Hadoop класифікуються на:

1. Об’єднання на стороні карти – Коли об’єднання виконується картографом, воно називається об’єднанням на стороні карти. У цьому типі об’єднання виконується до того, як дані фактично споживаються функцією map. Обов’язково, щоб вхідні дані для кожної карти були у формі розділу та були відсортовані. Крім того, має бути однакова кількість розділів, і вони повинні бути відсортовані за ключем об’єднання.

2. З’єднання з боку зменшення – Коли об’єднання виконується редуктором, воно називається об’єднанням на стороні зменшення. У цьому об’єднанні немає необхідності мати набір даних у структурованому вигляді (або розділеному).

Тут обробка на стороні карти видає ключ об’єднання та відповідні кортежі обох таблиць. Як результат цієї обробки, усі кортежі з однаковим ключем об’єднання потрапляють в той самий редуктор, який потім об’єднує записи з однаковим ключем об’єднання.

Загальний процес об’єднання в Hadoop зображено на схемі нижче.

Типи об’єднань у Hadoop MapReduce
Типи об’єднань у Hadoop MapReduce

Як об’єднати два набори даних: приклад MapReduce

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

Приклад MapReduce
файл 1
Приклад MapReduce
файл 2

Вхідний сигнал: Вхідним набором даних є текстовий файл, DeptName.txt і DepStrength.txt

Завантажте вхідні файли звідси

Переконайтеся, що Hadoop встановлено. Перш ніж розпочати фактичний процес прикладу MapReduce Join, змініть користувача на «hduser» (ідентифікатор, який використовується під час конфігурації Hadoop, ви можете переключитися на ідентифікатор користувача, який використовується під час конфігурації Hadoop).

su - hduser_

Приклад MapReduce

Крок 1) Скопіюйте файл zip у вибране вами місце

Приклад MapReduce

Крок 2) Розпакуйте файл Zip

sudo tar -xvf MapReduceJoin.tar.gz

Приклад MapReduce

Крок 3) Перейти до каталогу MapReduceJoin/

cd MapReduceJoin/

Приклад MapReduce

Крок 4) Запустіть Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Приклад MapReduce

Крок 5) DeptStrength.txt і DeptName.txt є вхідними файлами, які використовуються для прикладу програми MapReduce Join.

Ці файли потрібно скопіювати в HDFS за допомогою наведеної нижче команди-

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

Приклад MapReduce

Крок 6) Запустіть програму за допомогою команди нижче-

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

Приклад MapReduce

Приклад MapReduce

Крок 7) Після виконання вихідний файл (з назвою "part-00000") буде збережено в каталозі /output_mapreducejoin на HDFS

Результати можна побачити за допомогою інтерфейсу командного рядка

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

Приклад MapReduce

Результати також можна побачити через веб-інтерфейс як-

Приклад MapReduce

Тепер виберіть «Переглянути файлову систему» і перейдіть до /output_mapreducejoin

Приклад MapReduce

відкритий частина-р-00000

Приклад MapReduce

Показуються результати

Приклад MapReduce

ПРИМІТКА: Зауважте, що перед наступним запуском цієї програми вам потрібно буде видалити вихідний каталог /output_mapreducejoin

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

Альтернативою є використання іншої назви вихідного каталогу.

Що таке лічильник у MapReduce?

A Лічильник у MapReduce це механізм, який використовується для збору та вимірювання статистичної інформації про завдання та події MapReduce. Лічильники відстежують різноманітну статистику завдань у MapReduce, наприклад кількість виконаних операцій і хід виконання операції. Лічильники використовуються для діагностики проблем у MapReduce.

Лічильники Hadoop подібні до розміщення повідомлення журналу в коді карти чи зменшення. Ця інформація може бути корисною для діагностики проблеми в обробці завдань MapReduce.

Як правило, ці лічильники в Hadoop визначаються в програмі (відображення або скорочення) і збільшуються під час виконання, коли відбувається певна подія або умова (специфічна для цього лічильника). Дуже хорошим застосуванням лічильників Hadoop є відстеження дійсних і недійсних записів із вхідного набору даних.

Типи лічильників MapReduce

В основному існує 2 види MapReduce Лічильники

  1. Вбудовані лічильники Hadoop:Є кілька вбудованих лічильників Hadoop, які існують для кожного завдання. Нижче наведено вбудовані групи лічильників-
    • Лічильники завдань MapReduce – Збирає інформацію про завдання (наприклад, кількість вхідних записів) під час його виконання.
    • Лічильники файлової системи – Збирає інформацію, як-от кількість байтів, прочитаних або записаних завданням
    • Лічильники FileInputFormat – Збирає інформацію про кількість байтів, прочитаних через FileInputFormat
    • Лічильники FileOutputFormat – Збирає інформацію про кількість байтів, записаних через FileOutputFormat
    • Лічильники вакансій – Ці лічильники використовує JobTracker. Зібрана ними статистика включає, наприклад, кількість завдань, запущених для роботи.
  2. Визначені користувачем лічильники

Окрім вбудованих лічильників, користувач може визначати власні лічильники, використовуючи аналогічні функції, які надає мови програмування. Наприклад, в 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.