Hadoop MapReduce Join & Counter с пример

Какво е Join в Mapreduce?

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

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

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

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

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

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

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

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

Типове обединения в Hadoop MapReduce
Типове обединения в Hadoop MapReduce

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

Има два набора от данни в два различни файла (показани по-долу). Ключът Dept_ID е общ и в двата файла. Целта е да се използва MapReduce Join за комбиниране на тези файлове

Пример за MapReduce
Файл 1
Пример за MapReduce
Файл 2

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

отворено част-r-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.

Тук Броячи за продажби е брояч, дефиниран с помощта на "изброяване". Използва се за броене СКОРО намлява НЕВАЛИДЕН входни записи.

В кодовия фрагмент, ако "страна" полето има нулева дължина, тогава стойността му липсва и следователно съответният брояч Щатите за продажби.ЛИПСВА се увеличава.

На следващо място, ако "разпродажби" полето започва с a " тогава записът се счита за НЕВАЛИДЕН. Това се указва чрез нарастващ брояч Броячи за продажби.НЕВАЛИДЕН.