Hadoop - картограф в MapReduce

Опубликовано: 18 Февраля, 2022

Map-Reduce - это модель программирования, которая в основном разделена на две фазы: Map Phase и Reduce Phase . Он предназначен для параллельной обработки данных, которые разделяются на различных машинах (узлах). Программы Hadoop Java состоят из класса Mapper и класса Reducer вместе с классом драйвера. Hadoop Mapper - это функция или задача, которая используется для обработки всех входных записей из файла и генерации выходных данных, которые используются в качестве входных данных для Reducer. Он производит вывод, возвращая новые пары ключ-значение. Входные данные должны быть преобразованы в пары ключ-значение, поскольку Mapper не может обрабатывать необработанные входные записи или кортежи (пары ключ-значение). Картограф также генерирует небольшие блоки данных при обработке входных записей как пары ключ-значение. мы обсудим различные процессы, которые происходят в Mapper, основные функции и то, как пары ключ-значение генерируются в Mapper.

Давайте разберемся с Mapper в Map-Reduce:

Mapper - это простая определяемая пользователем программа, которая выполняет некоторые операции с разделениями ввода в соответствии с ее разработкой. Mapper - это базовый класс, который разработчик или программист должен расширить в своих строках кода в соответствии с требованиями организации. Тип ввода и вывода необходимо указать в аргументе класса Mapper, который разработчик должен изменить.

Например:

Class MyMappper extends Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>

Mapper - это начальная строка кода, которая изначально взаимодействует с входным набором данных. Предположим, если у нас есть 100 блоков данных из набора данных, который мы анализируем, тогда в этом случае будет 100 программ или процессов Mapper, которые работают параллельно на машинах (узлах) и производят собственный вывод, известный как промежуточный вывод, который затем сохраняется на Локальный диск, а не на HDFS. Выходные данные сопоставителя действуют как входные данные для Reducer, который выполняет некоторую операцию сортировки и агрегирования данных и выдает окончательный результат.

Mapper в основном состоит из 5 компонентов: вход, разделение входов, устройство чтения записей, карта и промежуточный выходной диск. Задача карты выполнена с использованием всего этого доступного компонента.

  1. Входные данные: входные данные - это записи или наборы данных, которые используются для целей анализа. Эти входные данные устанавливаются с помощью InputFormat . Это помогает определить местоположение входных данных, которые хранятся в HDFS (распределенная файловая система Hadoop).
  2. Разделения ввода: они отвечают за преобразование физических входных данных в некоторую логическую форму, чтобы Hadoop Mapper мог легко с ними справиться. Input-Splits генерируются с помощью InputFormat . Большой набор данных делится на множество входных разделов, которые зависят от размера входного набора данных. Каждому разделению ввода будет назначен отдельный Mapper. Input-Splits ссылаются только на входные данные, это не фактические данные. Блоки данных - не единственный фактор, который определяет количество разделений ввода в Map-Reduce. мы можем вручную настроить размер разделений ввода в свойстве mapred.max.split.size во время выполнения задания. Все эти входные разбиения используются каждым из блоков данных. Размер входных разделов измеряется в байтах. Каждое разделение ввода сохраняется в некоторой ячейке памяти (строки имени хоста). Map-Reduce помещает задачи карты как можно ближе к месту раскола. Разделение ввода с большим размером выполняется первым, так что время выполнения задания может быть минимизировано.
  3. Record-Reader: Record-Reader - это процесс, который имеет дело с выводом, полученным из входных разделений, и генерирует свой собственный вывод в виде пар ключ-значение до конца файла. Каждой строке, присутствующей в файле, будет назначено байтовое смещение с помощью Record-Reader. По умолчанию Record-Reader использует TextInputFormat для преобразования данных, полученных из разделений ввода, в пары ключ-значение, поскольку Mapper может обрабатывать только пары ключ-значение.
  4. Карта: пара "ключ-значение", полученная от Record-Reader, затем передается в карту, которая генерирует набор пар промежуточных пар "ключ-значение".
  5. Промежуточный выходной диск: наконец, промежуточный выходной пара ключ-значение будет сохранен на локальном диске как промежуточный выходной. Нет необходимости хранить данные в HDFS, так как это промежуточный выход. Если мы сохраним эти данные в HDFS, то стоимость записи будет больше из-за функции репликации. Это также увеличивает время его выполнения. Если каким-то образом выполняющееся задание прерывается, тогда в этом случае очистка этого промежуточного вывода, доступного в HDFS, также затруднена. Промежуточный вывод всегда сохраняется на локальном диске, который будет очищен после завершения выполнения задания. На локальном диске этот вывод Mapper сначала сохраняется в буфере, размер которого по умолчанию составляет 100 МБ, который можно настроить с помощью свойства io.sort.mb. Выходные данные сопоставителя могут быть записаны в HDFS тогда и только тогда, когда заданием является только задание сопоставления. В этом случае не будет задачи Reducer, поэтому промежуточный выход - это наш окончательный результат, который можно записать в HDFS. Количество задач Reducer можно обнулить вручную с помощью job.setNumReduceTasks (0). Этот вывод Mapper бесполезен для конечного пользователя, так как это временный вывод, полезный только для Reducer.

Как рассчитать количество картографов в Hadoop:

The number of blocks of input file defines the number of map-task in the Hadoop Map-phase,
which can be calculated with the help of the below formula.

Mapper = (total data size)/ (input split size)

Например: для файла размером 10 ТБ (размер данных), где размер каждого блока данных составляет 128 МБ (размер входного разделения), количество сопоставителей будет около 81920.