Hadoop – mrjob Python Library para MapReduce con ejemplo

mrjob es la famosa biblioteca de Python para MapReduce desarrollada por YELP. La biblioteca ayuda a los desarrolladores a escribir código MapReduce usando un lenguaje de programación Python . Los desarrolladores pueden probar el código Python de MapReduce escrito con mrjob localmente en su sistema o en la nube usando Amazon EMR (Elastic MapReduce). Amazon EMR es un servicio web basado en la nube proporcionado por Amazon Web Services para fines de Big Data.  mrjob es actualmente un marco activo para la programación de MapReduce o los trabajos de transmisión de Hadoop y tiene un buen soporte de documentos para Hadoop con python que cualquier otra biblioteca o marco disponible actualmente. con mrjob, podemos escribir código para Mapper y Reducer en una sola clase. En caso de que no tengamos Hadoop instalado, también podemos probar el programa mrjob en nuestro entorno de sistema local. mrjob es compatible con Python 2.7/3.4+.

Instale mrjob en su sistema

pip install mrjob            # for python3 use pip3

Entonces, resolvamos un problema de demostración para comprender cómo usar esta biblioteca con Hadoop.

Objetivo: contar el número de ocurrencias de palabras de un archivo de texto usando python mrjob

Paso 1: Cree un archivo de texto con el nombre data.txt y agréguele contenido.

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   

Paso 2: Cree un archivo con el nombre CountWord.py en la ubicación donde está disponible su archivo data.txt.

touch CountWord.py                 // create the python file with name CountWord 

Paso 3: agregue el siguiente código a este archivo python.

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()

A continuación se muestra la imagen del archivo My CountWord.py.

Paso 4: Ejecute el archivo python en su máquina local como se muestra a continuación para probar si funciona bien o no (Nota: estoy usando python3).

python CountWord.py data.txt

Podemos observar que está funcionando bien. Por defecto, mrjob produce la salida a STDOUT, es decir, en la terminal.

Ahora, una vez que hayamos verificado que Mapper y Reducer funcionan bien. Luego, podemos implementar este código en el clúster de Hadoop o Amazon EMR y podemos usarlo. Cuando queremos ejecutar el código mrjob en Hadoop o Amazon EMR, debemos especificar la opción -r/–runner con el comando. Las diferentes opciones disponibles para ejecutar mrjob se explican a continuación.

Elección Descripción
-r en línea mrjob se ejecuta en un solo programa de python (opción predeterminada) 
-r locales mrjob se ejecuta localmente en algún subproceso junto con algunas características de Hadoop
-r hadoop mrjob se ejecuta en Hadoop
-r emr mrjob se ejecuta en Amazon Elastic MapReduce

Ejecutando mrjob en Hadoop HDFS

Sintaxis:  

python <mrjob-pythonfile> -r hadoop <hdfs-path>

Dominio:

Envíe sus datos.txt a HDFS con la ayuda del siguiente comando ( NOTA : ya he enviado datos.txt a la carpeta C ountcontent en HDFS) .

hdfs dfs -put /home/dikshant/Desktop/data.txt /

Ejecute el siguiente comando para ejecutar mrjob en Hadoop.

python CountWord.py -r hadoop hdfs:///content/data.txt

En la imagen de arriba, podemos ver claramente que hemos ejecutado con éxito mrjob en el archivo de texto disponible en nuestro HDFS. 

Publicación traducida automáticamente

Artículo escrito por dikshantmalidev y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *