Hadoop Streaming: написание программы Hadoop MapReduce на Python



Это сообщение в блоге о Hadoop Streaming представляет собой пошаговое руководство по написанию программы Hadoop MapReduce на Python для обработки огромных объемов больших данных.

Количество цифровых данных, генерируемых каждый день, растет в геометрической прогрессии с появлением цифровых медиа, Интернета вещей и прочего. Этот сценарий породил проблемы при создании инструментов и технологий нового поколения для хранения и управления этими данными. Вот где на помощь приходит Hadoop Streaming! Ниже приведен график, который показывает рост данных, ежегодно генерируемых в мире с 2013 года. По оценкам IDC, объем данных, создаваемых ежегодно, достигнет 180 зеттабайт к 2025 году!

data-by-2025-hadoop-streaming





Источник: IDC

IBM заявляет, что каждый день создается почти 2,5 квинтиллиона байтов данных, причем 90 процентов мировых данных создано за последние два года! Хранить такой большой объем данных - сложная задача. Hadoop может обрабатывать большие объемы структурированных и неструктурированных данных более эффективно, чем традиционное корпоративное хранилище данных. Он хранит эти огромные наборы данных в распределенных кластерах компьютеров. Hadoop Streaming использует инфраструктуру MapReduce, которую можно использовать для написания приложений для обработки огромных объемов данных.



Поскольку фреймворк MapReduce основан на Java, вам может быть интересно, как разработчик может работать с ним, если у него нет опыта работы с Java. Что ж, разработчики могут писать приложение mapper / Reducer, используя свой предпочтительный язык и без особых знаний Java, используя Потоковая передача Hadoop вместо перехода на новые инструменты или технологии, такие как Pig and Hive.

разница между изменчивым и неизменным

Что такое Hadoop Streaming?

Hadoop Streaming - это утилита, входящая в состав дистрибутива Hadoop. Его можно использовать для выполнения программ анализа больших данных. Потоковая передача Hadoop может выполняться с использованием таких языков, как Python, Java, PHP, Scala, Perl, UNIX и многих других. Утилита позволяет нам создавать и запускать задания Map / Reduce с любым исполняемым файлом или скриптом в качестве преобразователя и / или редуктора. Например:

$ HADOOP_HOME / bin / hadoop jar $ HADOOP_HOME / hadoop-streaming.jar



-ввод myInputDirs

-output myOutputDir

-папка / bin / cat

-редуктор / бункер / туалет

Параметры Описание:

Код Python MapReduce:

mapper.py #! / usr / bin / python import sys # Пример счетчика слов # ввод поступает из стандартного ввода STDIN для строки в sys.stdin: line = line.strip () # удалить начальные и конечные пробелы words = line.split ( ) # разделить строку на слова и вернуть в виде списка для слов в словах: # записать результаты в стандартный вывод STDOUT print '% s% s'% (word, 1) # Выпустить слово

reducer.py

#! / usr / bin / python import sys from operator import itemgetter # использование словаря для сопоставления слов с их счетчиками current_word = None current_count = 0 word = None # ввод поступает из STDIN для строки в sys.stdin: line = line.strip () word, count = line.split ('', 1) try: count = int (count) except ValueError: continue if current_word == word: current_count + = count else: if current_word: print '% s% s'% (current_word, current_count) current_count = count current_word = word, если current_word == word: print '% s% s'% (current_word, current_count)

Бегать:

  1. Создайте файл со следующим содержимым и назовите его word.txt.

Кошка мышь лев олень Тигр лев Слон лев олень

  1. Скопируйте скрипты mapper.py и reducer.py в ту же папку, где существует указанный выше файл.

  1. Откройте терминал и найдите каталог с файлом. Команда: ls: чтобы вывести список всех файлов в каталоге. Cd: чтобы изменить каталог / папку.

  1. Смотрите содержимое файла.
    Команда: кошка имя файла

> содержание mapper.py

команда: cat mapper.py

> Содержание reducer.py

команда: кошка reducer.py

Мы можем запустить mapper и reducer для локальных файлов (например, word.txt). Чтобы запустить Map и уменьшить в распределенной файловой системе Hadoop (HDFS), нам понадобится Jar-файл для потоковой передачи Hadoop. Поэтому, прежде чем запускать сценарии в HDFS, давайте запустим их локально, чтобы убедиться, что они работают нормально.

> Запустить картограф

команда: кот word.txt | python mapper.py

> Запустите reducer.py

команда: кот word.txt | python mapper.py | sort -k1,1 | python reducer.py

Мы видим, что преобразователь и редуктор работают, как ожидалось, поэтому никаких дополнительных проблем не возникнет.

Запуск Код Python на Hadoop

Прежде чем запускать задачу MapReduce в Hadoop, скопируйте локальные данные (word.txt) в HDFS.

> пример: hdfs dfs -put исходный_каталог hadoop_destination_directory

команда: hdfs dfs -put /home/edureka/MapReduce/word.txt / пользователь / edureka

Скопируйте путь к файлу jar

Путь к jar-файлу Hadoop Streaming в зависимости от версии jar-файла:

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

Поэтому найдите банку Hadoop Streaming на своем терминале и скопируйте путь.

команда:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

Запустите задание MapReduce

команда:

банка hadoop /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file / home / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

Hadoop предоставляет базовый веб-интерфейс для статистики и информации. Когда кластер Hadoop работает, откройте в браузере http: // localhost: 50070. Вот скриншот веб-интерфейса Hadoop.

Теперь просмотрите файловую систему и найдите созданный файл wordcount, чтобы увидеть результат. Ниже скриншот.

Мы можем увидеть вывод на терминале, используя эту команду

команда: hadoop fs -cat / пользователь / edureka / Wordcount / часть-00000

Теперь вы узнали, как выполнить программу MapReduce, написанную на Python, с использованием Hadoop Streaming!

В Edureka есть живой курс по большим данным и Hadoop под руководством инструктора, созданный отраслевыми практиками.

Есть вопрос к нам? Пожалуйста, отметьте это в разделе комментариев, и мы свяжемся с вами.