Hadoop MapReduce Join & Counter с пример
Какво е Join в Mapreduce?
Mapreduce Присъединете се се използва за комбиниране на два големи набора от данни. Този процес обаче включва писане на много код за извършване на действителната операция за присъединяване. Свързването на два набора от данни започва със сравняване на размера на всеки набор от данни. Ако един набор от данни е по-малък в сравнение с другия набор от данни, тогава по-малък набор от данни се разпространява до всеки възел от данни в клъстера.
След като съединението в MapReduce е разпределено, или Mapper, или Reducer използва по-малкия набор от данни, за да извърши търсене за съвпадащи записи от големия набор от данни и след това да комбинира тези записи, за да образува изходни записи.
Видове присъединяване
В зависимост от мястото, където се извършва действителното присъединяване, присъединяванията в Hadoop се класифицират на:
1. Присъединяване от страна на картата – Когато свързването се извършва от съпоставителя, то се нарича като съединение от страната на картата. При този тип свързването се извършва преди данните действително да бъдат консумирани от функцията за карта. Задължително е входът към всяка карта да е под формата на дял и да е в сортиран ред. Освен това трябва да има равен брой дялове и трябва да се сортира по ключа за присъединяване.
2. Съединяване от страна на намаляване – Когато съединяването се извършва от редуктора, то се нарича съединяване от страната на редуциране. В това присъединяване не е необходимо да има набор от данни в структурирана форма (или разделен).
Тук обработката от страната на картата излъчва ключ за присъединяване и съответните кортежи от двете таблици. Като ефект от тази обработка, всички кортежи с един и същ ключ за свързване попадат в един и същ редуктор, който след това обединява записите с един и същ ключ за свързване.
Цялостният процес на присъединяване в Hadoop е изобразен на диаграмата по-долу.
Как да съедините два набора от данни: Пример за MapReduce
Има два набора от данни в два различни файла (показани по-долу). Ключът Dept_ID е общ и в двата файла. Целта е да се използва MapReduce Join за комбиниране на тези файлове
Вход: Наборът от входни данни е 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
Алтернатива е да използвате различно име за изходната директория.
Какво е брояч в 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.
Тук Броячи за продажби е брояч, дефиниран с помощта на "изброяване". Използва се за броене СКОРО намлява НЕВАЛИДЕН входни записи.
В кодовия фрагмент, ако "страна" полето има нулева дължина, тогава стойността му липсва и следователно съответният брояч Щатите за продажби.ЛИПСВА се увеличава.
На следващо място, ако "разпродажби" полето започва с a " тогава записът се счита за НЕВАЛИДЕН. Това се указва чрез нарастващ брояч Броячи за продажби.НЕВАЛИДЕН.