Hadoop MapReduce Присъединяване & Брояч с пример

Какво е присъединяване в Mapreduce?

Операцията Mapreduce Join се използва за комбиниране на два големи набора от данни. Този процес обаче включва писане на много код за извършване на действителната операция за присъединяване. Обединяването на два набора от данни започва чрез сравняване на размера на всеки набор от данни. Ако единият набор от данни е по-малък в сравнение с другия набор от данни, тогава по-малкият набор от данни се разпределя във всеки възел за данни в клъстера.

След като се присъедини към MapReduce, Mapper или Reducer използва по-малкия набор от данни, за да извърши търсене за съвпадение на записи от големия набор от данни и след това комбинира тези записи, за да формира изходни записи.

В този урок ще научите -

  • Какво е присъединяване в MapReduce?
  • Видове присъединяване
  • Как да се присъедините към два набора от данни: Пример MapReduce
  • Какво е Counter в MapReduce?
  • Видове броячи на MapReduce
  • Пример за броячи

Видове присъединяване

В зависимост от мястото, където се извършва действителното присъединяване, присъединяванията в Hadoop се класифицират по

1. Присъединяване от страна на картата - Когато обединяването се извършва от съпоставителя, то се извиква като присъединяване от страна на картата. При този тип обединяването се извършва преди данните действително да се консумират от функцията map. Задължително е входът към всяка карта да е под формата на дял и да е в сортиран ред. Освен това трябва да има равен брой дялове и той трябва да бъде сортиран по ключа за присъединяване.

2. Съединяване от страна на редукцията - Когато съединението се извършва от редуктора, то се нарича съединение от страна на редукцията. Няма нужда в това присъединяване да има набор от данни в структурирана форма (или разделен).

Тук обработката на картата излъчва ключ за присъединяване и съответстващи кортежи на двете таблици. В резултат на тази обработка всички кортежи с един и същ ключ за присъединяване попадат в един и същ редуктор, който след това обединява записите с един и същ ключ за присъединяване.

Цялостен процес на присъединяване в Hadoop е показан на диаграмата по-долу.

Видове присъединявания в Hadoop MapReduce

Как да се присъедините към два набора от данни: Пример MapReduce

Има два набора от данни в два различни файла (показани по-долу). Key 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?

А Counter в MapReduce е механизъм, използван за събиране и измерване на статистическа информация за MapReduce работни места и събития. Броячите следят различните статистически данни за работата в MapReduce като броя на извършените операции и напредъка на операцията. Броячите се използват за диагностика на проблеми в MapReduce.

Броячите на Hadoop са подобни на поставянето на регистрационно съобщение в кода за карта или намаляване. Тази информация може да бъде полезна за диагностика на проблем в обработката на задачите MapReduce.

Обикновено тези броячи в Hadoop се дефинират в програма (картографиране или намаляване) и се увеличават по време на изпълнение, когато настъпи определено събитие или условие (специфично за този брояч). Много добро приложение на броячите на Hadoop е проследяването на валидни и невалидни записи от входящ набор от данни.

Видове броячи на MapReduce

По принцип има 2 вида броячи на MapReduce

    1. Вградени броячи на Hadoop: Има няколко вградени броячи на Hadoop, които съществуват на работа. По-долу са вградени броячни групи-
      • MapReduce броячи на задачите - Събира специфична за задача информация (напр. Брой входящи записи) по време на нейното изпълнение.
      • 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' . Използва се за преброяване на липсващи и невалидни входни записи.

В кодовия фрагмент, ако полето "страна" има нулева дължина, тогава стойността му липсва и следователно съответният брояч SalesCounters.MISSING се увеличава.

На следващо място, ако полето "продажби" започва с ", тогава записът се счита за НЕВЪЗМОЖЕН. Това се показва чрез увеличаване на брояча SalesCounters.INVALID.

Интересни статии...