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

Что такое объединение в Mapreduce?

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

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

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

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

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

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

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

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

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

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

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

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

Входной сигнал: Набор входных данных представляет собой текстовый файл, DeptName.txt и DepStrength.txt

Загрузите исходные файлы отсюда

Убедитесь, что у вас установлен Hadoop. Прежде чем приступить к реальному процессу примера соединения MapReduce, измените пользователя на «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. Счетчики ведут учет tracВ MapReduce используются различные статистические данные о заданиях, такие как количество выполненных операций и ход их выполнения. Счетчики используются для диагностики проблем в MapReduce.

Счетчики Hadoop аналогичны помещению сообщения журнала в код карты или сокращения. Эта информация может быть полезна для диагностики проблем при обработке заданий MapReduce.

Как правило, в Hadoop эти счетчики определяются в программе (map или reduce) и увеличиваются во время выполнения при возникновении определенного события или условия (специфичного для этого счетчика). Очень хорошее применение счетчиков Hadoop — это track допустимых и недопустимых записей из входного набора данных.

Типы счетчиков MapReduce

В основном есть 2 типа Уменьшение карты Счетчики

  1. Встроенные счетчики Hadoop:Есть несколько встроенных счетчиков Hadoop, которые существуют для каждого задания. Ниже представлены встроенные группы счетчиков-
    • Счетчики задач MapReduce – Собирает информацию, специфичную для задачи (например, количество входных записей) во время ее выполнения.
    • Счетчики файловой системы – Собирает такую ​​информацию, как количество байтов, прочитанных или записанных задачей.
    • Счетчики FileInputFormat – Собирает информацию о количестве байтов, прочитанных через FileInputFormat.
    • Счетчики FileOutputFormat – Собирает информацию о количестве байтов, записанных через FileOutputFormat.
    • Счетчики заданий – Эти счетчики используются ИовомTracкер. Собранные ими статистические данные включают, например, количество заданий, запущенных для выполнения работы.
  2. Пользовательские счетчики

Помимо встроенных счетчиков, пользователь может определять свои собственные счетчики, используя аналогичные функции, предоставляемые языки программирования, Например, в Java 'enum' используются для определения определяемых пользователем счетчиков.

Пример счетчиков

Пример MapClass со счетчиками для подсчета количества пропущенных и недопустимых значений. Файл входных данных, используемый в этом руководстве. Наш набор входных данных представляет собой файл CSV. Продажиянварь2009.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 Download.

Здесь, Счетчики продаж это счетчик, определенный с помощью 'перечисление'. Он используется для подсчета ОТСУТСТВУЕТ и НЕДЕЙСТВИТЕЛЬНЫМ входные записи.

В фрагменте кода, если 'страна' поле имеет нулевую длину, то его значение отсутствует и, следовательно, соответствующий счетчик SalesCounters.ОТСУТСТВУЕТ увеличивается.

Далее, если 'продажи' поле начинается с тогда запись считается НЕДЕЙСТВИТЕЛЬНОЙ. На это указывает увеличение счетчика SalesCounters.INVALID.

Подведем итог этой публикации следующим образом: