Присоединение к Hadoop MapReduce & Счетчик с примером

Содержание:

Anonim

Что такое Join в Mapreduce?

Операция Mapreduce Join используется для объединения двух больших наборов данных. Однако этот процесс включает в себя написание большого количества кода для выполнения фактической операции соединения. Объединение двух наборов данных начинается со сравнения размера каждого набора данных. Если один набор данных меньше по сравнению с другим набором данных, то меньший набор данных распределяется по каждому узлу данных в кластере.

После распределения соединения в MapReduce либо Mapper, либо Reducer используют меньший набор данных для выполнения поиска совпадающих записей из большого набора данных, а затем объединяют эти записи для формирования выходных записей.

В этом руководстве вы узнаете:

  • Что такое соединение в MapReduce?
  • Типы присоединения
  • Как объединить два набора данных: пример MapReduce
  • Что такое счетчик в MapReduce?
  • Типы счетчиков MapReduce
  • Пример счетчиков

Типы присоединения

В зависимости от места, где выполняется фактическое соединение, соединения в Hadoop подразделяются на:

1. Соединение на стороне карты - когда соединение выполняется картографом, оно называется соединением на стороне карты. В этом типе соединение выполняется до того, как данные будут фактически использованы функцией карты. Обязательно, чтобы входные данные для каждой карты были в виде раздела и были отсортированы. Кроме того, должно быть равное количество разделов, и они должны быть отсортированы по ключу соединения.

2. Соединение с уменьшенной стороной - когда соединение выполняется редуктором, оно называется соединением с уменьшенной стороной. В этом соединении нет необходимости иметь набор данных в структурированной (или секционированной) форме.

Здесь обработка стороны карты выдает ключ соединения и соответствующие кортежи обеих таблиц. В результате этой обработки все кортежи с одним и тем же ключом соединения попадают в один и тот же редуктор, который затем объединяет записи с одним и тем же ключом соединения.

Общий процесс объединения в Hadoop показан на диаграмме ниже.

Типы объединений в Hadoop MapReduce

Как объединить два набора данных: пример MapReduce

Есть два набора данных в двух разных файлах (показано ниже). Key Dept_ID является общим в обоих файлах. Цель состоит в том, чтобы использовать MapReduce Join для объединения этих файлов.

Файл 1
Файл 2

Вход: набор входных данных - текстовый файл, 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.

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