Что такое Hadoop Streaming?

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

Это утилита или функция, поставляемая с дистрибутивом Hadoop, которая позволяет разработчикам или программистам писать программу Map-Reduce с использованием различных языков программирования, таких как Ruby, Perl, Python, C ++ и т. Д. Мы можем использовать любой язык, который может читать из стандарта ввод (STDIN), как ввод с клавиатуры, и все, и запись с использованием стандартного вывода (STDOUT). Все мы знаем, что Hadoop Framework полностью написан на java, но программы для Hadoop не обязательно должны кодироваться на языке программирования Java. функция Hadoop Streaming доступна, начиная с версии Hadoop 0.14.1.

Как работает Hadoop Streaming

В приведенном выше примере изображения мы видим, что поток, показанный пунктирным блоком, является базовым заданием MapReduce. В нем у нас есть считыватель ввода, который отвечает за чтение входных данных и создает список пар ключ-значение. Мы можем читать данные в формате .csv, в формате разделителя, из таблицы базы данных, данные изображения (.jpg, .png), аудиоданные и т. Д. Единственное требование для чтения всех этих типов данных - это то, что мы должны создать конкретный формат ввода для этих данных с этими считывателями ввода. Считыватель ввода содержит полную логику считываемых данных. Предположим, мы хотим прочитать изображение, тогда мы должны указать логику в считывателе ввода, чтобы он мог читать эти данные изображения и, наконец, он сгенерировал пары ключ-значение для этих данных изображения.

Если мы читаем данные изображения, мы можем сгенерировать пару ключ-значение для каждого пикселя, где ключ будет местоположением пикселя, а значение будет его значением цвета из (0-255) для цветного изображения. Теперь этот список пар ключ-значение подается на этап Map, и Mapper будет работать с каждой из этих пар ключ-значение каждого пикселя и генерировать несколько промежуточных пар ключ-значение, которые затем передаются в Reducer после перетасовки и сортировки, а затем окончательный вывод редуктора будет записан в HDFS. Вот как работает простая работа Map-Reduce.

Теперь давайте посмотрим, как мы можем использовать для выполнения разные языки, такие как Python, C ++, Ruby, с Hadoop. Мы можем запустить этот произвольный язык, запустив их как отдельный процесс. Для этого мы создадим наш внешний картограф и запустим его как внешний отдельный процесс. Эти внешние процессы карты не являются частью основного потока MapReduce. Этот внешний преобразователь будет принимать входные данные из STDIN и выдавать выходные данные в STDOUT. Поскольку пары ключ-значение передаются внутреннему сопоставителю, внутренний процесс сопоставления отправит эти пары ключ-значение внешнему сопоставителю, где мы написали наш код на каком-то другом языке, например, с python, с помощью STDIN. Теперь эти внешние сопоставители обрабатывают эти пары «ключ-значение» и генерируют промежуточные пары «ключ-значение» с помощью STDOUT и отправляют их внутренним сопоставителям.

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

Вот как Hadoop Streaming работает в Hadoop, который по умолчанию доступен в Hadoop. Мы просто используем эту функцию, создав наши внешние преобразователи и редукторы. Теперь мы видим, насколько мощной функцией является потоковая передача Hadoop. Каждый может написать свой код на любом языке по своему выбору.

Некоторые команды потоковой передачи Hadoop

Вариант

Описание

-input имя_каталога или имя файла Местоположение ввода для картографа.
-output имя_каталога Место входа для редуктора.
-mapper исполняемый файл или JavaClassName Команда, которую нужно запустить в качестве картографа
-reducer исполняемый файл или скрипт или JavaClassName Команда, которую нужно запустить как редуктор
-file имя-файла Сделайте исполняемый файл сопоставителя, редуктора или объединителя доступным локально на вычислительных узлах.
-inputformat JavaClassName По умолчанию TextInputformat используется для возврата пары ключ-значение класса Text. Мы можем указать наш класс, но он также должен вернуть пару «ключ-значение».
-outputformat JavaClassName По умолчанию TextOutputformat используется для получения пар ключ-значение класса Text. Мы можем указать наш класс, но он также должен принимать пару ключ-значение.
-partitioner JavaClassName Класс, определяющий, какой ключ уменьшить.
-combiner streamingCommand или JavaClassName Исполняемый файл Combiner для вывода карты
-подробный Подробный вывод.
-numReduceTasks Он определяет количество редукторов.
-mapdebug Сценарий для вызова при сбое задачи карты
-reducedebug Сценарий для вызова при сбое задачи уменьшения