Что такое Join в Mapreduce?
Операция Mapreduce Join используется для объединения двух больших наборов данных. Однако этот процесс включает в себя написание большого количества кода для выполнения фактической операции соединения. Объединение двух наборов данных начинается со сравнения размера каждого набора данных. Если один набор данных меньше по сравнению с другим набором данных, то меньший набор данных распределяется по каждому узлу данных в кластере.
После распределения соединения в MapReduce либо Mapper, либо Reducer используют меньший набор данных для выполнения поиска совпадающих записей из большого набора данных, а затем объединяют эти записи для формирования выходных записей.
В этом руководстве вы узнаете:
- Что такое соединение в MapReduce?
- Типы присоединения
- Как объединить два набора данных: пример MapReduce
- Что такое счетчик в MapReduce?
- Типы счетчиков MapReduce
- Пример счетчиков
Типы присоединения
В зависимости от места, где выполняется фактическое соединение, соединения в Hadoop подразделяются на:
1. Соединение на стороне карты - когда соединение выполняется картографом, оно называется соединением на стороне карты. В этом типе соединение выполняется до того, как данные будут фактически использованы функцией карты. Обязательно, чтобы входные данные для каждой карты были в виде раздела и были отсортированы. Кроме того, должно быть равное количество разделов, и они должны быть отсортированы по ключу соединения.
2. Соединение с уменьшенной стороной - когда соединение выполняется редуктором, оно называется соединением с уменьшенной стороной. В этом соединении нет необходимости иметь набор данных в структурированной (или секционированной) форме.
Здесь обработка стороны карты выдает ключ соединения и соответствующие кортежи обеих таблиц. В результате этой обработки все кортежи с одним и тем же ключом соединения попадают в один и тот же редуктор, который затем объединяет записи с одним и тем же ключом соединения.
Общий процесс объединения в Hadoop показан на диаграмме ниже.
Как объединить два набора данных: пример MapReduce
Есть два набора данных в двух разных файлах (показано ниже). Key Dept_ID является общим в обоих файлах. Цель состоит в том, чтобы использовать MapReduce Join для объединения этих файлов.
Вход: набор входных данных - текстовый файл, 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.
Открыть part-r-00000
Результаты показаны
ПРИМЕЧАНИЕ: обратите внимание, что перед запуском этой программы в следующий раз вам нужно будет удалить выходной каталог / output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Альтернативой является использование другого имени для выходного каталога.
Что такое счетчик в MapReduce?
Счетчик в MapReduce представляет собой механизм , используемый для сбора и измерения статистической информации о заданиях MapReduce и событиях. Счетчики отслеживают различную статистику заданий в MapReduce, такую как количество выполненных операций и ход выполнения операции. Счетчики используются для диагностики проблем в MapReduce.
Счетчики Hadoop аналогичны помещению сообщения журнала в код для карты или сокращения. Эта информация может быть полезна для диагностики проблемы при обработке заданий MapReduce.
Как правило, эти счетчики в Hadoop определяются в программе (сопоставление или сокращение) и увеличиваются во время выполнения при возникновении определенного события или условия (специфичного для этого счетчика). Очень хорошее применение счетчиков Hadoop - отслеживать действительные и недопустимые записи из входного набора данных.
Типы счетчиков MapReduce
Существует два основных типа счетчиков MapReduce.
- Встроенные счетчики Hadoop: существует несколько встроенных счетчиков Hadoop для каждого задания. Ниже приведены встроенные группы счетчиков:
- Счетчики задач MapReduce - собирают информацию о задаче (например, количество входных записей) во время ее выполнения.
- Счетчики файловой системы - собирают такую информацию, как количество байтов, прочитанных или записанных задачей.
- Счетчики FileInputFormat - собирают информацию о количестве байтов, прочитанных через FileInputFormat.
- Счетчики FileOutputFormat - собирают информацию о количестве байтов, записанных через FileOutputFormat.
- Счетчики заданий - эти счетчики используются JobTracker. Собранная ими статистика включает, например, количество запущенных задач для работы.
- Счетчики, определяемые пользователем
Помимо встроенных счетчиков, пользователь может определять свои собственные счетчики, используя аналогичные функции, предоставляемые языками программирования. Например, в 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.