Hadoop - библиотека Python mrjob для MapReduce с примером
mrjob - это известная библиотека Python для MapReduce, разработанная YELP. Библиотека помогает разработчикам писать код MapReduce с использованием языка программирования Python. Разработчики могут протестировать код Python MapReduce, написанный с помощью mrjob, локально в своей системе или в облаке с помощью Amazon EMR (Elastic MapReduce). Amazon EMR - это облачный веб-сервис, предоставляемый Amazon Web Services для больших данных. В настоящее время mrjob является активной платформой для программирования MapReduce или заданий потоковой передачи Hadoop и имеет хорошую поддержку документов для Hadoop с python, чем любая другая библиотека или среда, доступная в настоящее время. С помощью mrjob мы можем написать код для Mapper и Reducer в одном классе. Если у нас не установлен Hadoop, мы также можем протестировать программа mrjob в нашей локальной системной среде. mrjob поддерживает Python 2.7 / 3.4 +.
Установите mrjob в вашу систему
pip install mrjob # для python3 используйте pip3
Итак, давайте решим одну демонстрационную задачу, чтобы понять, как использовать эту библиотеку с Hadoop.
Цель: подсчитать количество вхождений слов из текстового файла с помощью python mrjob.
Шаг 1. Создайте текстовый файл с именем data.txt и добавьте в него содержимое.
touch data.txt //used to create file in linux nano data.txt // nano is a command line editor in linux cat data.txt // used to see the inner content of file
Шаг 2: Создайте файл с именем CountWord.py в том месте, где доступен ваш файл data.txt.
touch CountWord.py // создаем файл python с именем CountWord
Step 3: Add the below code to this python file.
Python3
from mrjob.job import MRJob class Count(MRJob): """ The below mapper() function defines the mapper for MapReduce and takes key value argument and generates the output in tuple format . The mapper below is splitting the line and generating a word with its own count i.e. 1 """ def mapper( self , _, line): for word in line.split(): yield (word, 1 ) """ The below reducer() is aggregating the result according to their key and producing the output in a key-value format with its total count""" def reducer( self , word, counts): yield (word, sum (counts)) """the below 2 lines are ensuring the execution of mrjob, the program will not execute without them""" if __name__ = = "__main__" : Count.run() |
Ниже приведено изображение файла My CountWord.py.
Шаг 4: Запустите файл python на локальном компьютере, как показано ниже, чтобы проверить, работает ли он нормально или нет (Примечание: я использую python3).
python CountWord.py data.txt
Мы видим, что он работает нормально. По умолчанию mrjob производит вывод в STDOUT, то есть на терминал.
Теперь, когда мы убедились, что Mapper и Reducer работают нормально. Затем мы можем развернуть этот код в кластере Hadoop или Amazon EMR и использовать его. Когда мы хотим запустить код mrjob в Hadoop или Amazon EMR, мы должны указать в команде параметр -r / –runner. Ниже описаны различные варианты, доступные для запуска mrjob. Выбор Описание -r встроенный mrjob запускается в одной программе на Python (вариант по умолчанию) -r местный mrjob запускается локально в каком-то подпроцессе вместе с некоторыми функциями Hadoop. -r hadoop mrjob работает на Hadoop -r emr mrjob работает на Amazon Elastic MapReduce
Запуск mrjob на Hadoop HDFS
Синтаксис:
python <mrjob-pythonfile> -r hadoop <hdfs-path>
Команда:
Отправьте свой data.txt в HDFS с помощью следующей команды ( ПРИМЕЧАНИЕ : я уже отправил data.txt в папку Countcontent на HDFS) .
hdfs dfs -put /home/dikshant/Desktop/data.txt /
Выполните приведенную ниже команду, чтобы запустить mrjob в Hadoop.
python CountWord.py -r hadoop hdfs: ///content/data.txt
Из приведенного выше изображения мы можем ясно видеть, что мы успешно выполнили mrjob для текстового файла, доступного в нашей HDFS.