Hadoop - библиотека Python mrjob для MapReduce с примером

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

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.