Hadoop MapReduce Приєднуйтесь & Лічильник із прикладом

Зміст:

Anonim

Що таке Приєднання до Mapreduce?

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

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

У цьому підручнику ви дізнаєтесь-

  • Що таке приєднання до MapReduce?
  • Типи приєднання
  • Як об’єднати два набори даних: Приклад MapReduce
  • Що таке Counter у MapReduce?
  • Типи лічильників MapReduce
  • Приклад лічильників

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

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

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

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

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

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

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

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

У двох різних файлах є два набори даних (показано нижче). Ідентифікатор ключа Dept_ID є загальним в обох файлах. Мета полягає у використанні MapReduce Join для об'єднання цих файлів

Файл 1
Файл 2

Вхідні дані: Набір вхідних даних - це файл txt, 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

Відкрийте частину-r-00000

Результати показані

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

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

Альтернатива - використовувати інше ім’я для вихідного каталогу.

Що таке Counter у MapReduce?

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

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

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

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

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

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

На додаток до вбудованих лічильників, користувач може визначати власні лічильники, використовуючи подібні функціональні можливості, що надаються мовами програмування. Наприклад, у Java 'enum' використовується для визначення визначених користувачем лічильників.

Приклад лічильників

Приклад MapClass з лічильниками для підрахунку кількості відсутніх та недійсних значень. Файл вхідних даних, що використовується у цьому посібнику. Нашим набором вхідних даних є файл CSV, SalesJan2009.csv

public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString 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.

Тут SalesCounters - це лічильник, визначений за допомогою 'enum' . Застосовується для підрахунку відсутніх та недійсних вхідних записів.

У фрагменті коду, якщо поле 'country' має нульову довжину, тоді його значення відсутнє і, отже, відповідний лічильник SalesCounters.MISSING збільшується.

Далі, якщо поле "продаж" починається з ", тоді запис вважається НЕВІЛЬНИМ. Це позначається збільшенням лічильника SalesCounters.INVALID.