Hadoop streaming es una utilidad que viene con el Hadoop distribución. Esta utilidad le permite crear y ejecutar Map/Reduce los trabajos con cualquier archivo ejecutable o script como el mapa y/o el reductor.
Para Hadoop streaming, vamos a considerar el conteo de palabras. Cualquier trabajo de Hadoop debe tener dos fases: mapa y reductor. Hemos escrito los códigos para el mapa y el reductor de script en python para que se ejecute con Hadoop. También se puede escribir la misma en Perl y Ruby.
!/usr/bin/python import sys # Input takes from standard input for myline in sys.stdin: # Remove whitespace either side myline = myline.strip() # Break the line into words words = myline.split() # Iterate the words list for myword in words: # Write the results to standard output print '%s\t%s' % (myword, 1)
Asegúrese de que este archivo tiene permiso de ejecución (chmod +x /home/ expert/hadoop-1.2.1/mapper.py).
#!/usr/bin/python from operator import itemgetter import sys current_word = "" current_count = 0 word = "" # Input takes from standard input for myline in sys.stdin: # Remove whitespace either side myline = myline.strip() # Split the input we got from mapper.py word, count = myline.split('\t', 1) # Convert count variable to integer try: count = int(count) except ValueError: # Count was not a number, so silently ignore this line continue if current_word == word: current_count += count else: if current_word: # Write result to standard output print '%s\t%s' % (current_word, current_count) current_count = count current_word = word # Do not forget to output the last word if needed! if current_word == word: print '%s\t%s' % (current_word, current_count)
Guardar el mapa y reductor en los códigos de mapper.py y reductor.py en Hadoop directorio home. Asegúrese de que estos archivos tienen permisos de ejecución (chmod +x mapper.py and chmod +x reducer.py). Sangría Como python es sensible por lo que el mismo código se puede descargar desde el enlace que aparece a continuación.
$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1. 2.1.jar \ -input input_dirs \ -output output_dir \ -mapper <path/mapper.py \ -reducer <path/reducer.py
Donde " \" se usa para continuación de línea clara de legibilidad.
./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py
En el ejemplo anterior, tanto el mapa y el reductor son secuencias de comandos python que lee la entrada desde la entrada estándar y emiten la salida a la salida estándar. La utilidad crea un mapa/Reducir trabajo, enviar el trabajo a un clúster, y supervisar el progreso de la tarea hasta que finalice.
Cuando se especifica una secuencia de mapas mapa, cada tarea se iniciará la secuencia de comandos como un proceso independiente cuando el mapa se inicializa. Como el mapa tarea se ejecuta, lo que convierte sus entradas en las líneas de alimentación y las líneas de la entrada estándar (STDIN) del proceso. En el ínterin, el mapa recoge la línea de productos orientada a la salida estándar (STDOUT) del proceso y convierte cada línea en un par de clave/valor, que se recoge en la salida del mapa. De forma predeterminada, el prefijo de la línea hasta el primer carácter de tabulación es la clave y el resto de la línea (excluyendo el carácter de tabulación) será el valor. Si no hay ningún carácter de tabulación en la línea y, a continuación, toda la línea se considera la clave y el valor es null. Sin embargo, esta puede ser personalizada, en función de una necesidad.
Cuando se especifica una secuencia de reductores reductor, cada tarea se iniciará la secuencia de comandos como un proceso separado, a continuación, el reductor se ha inicializado. Como el reductor tarea se ejecuta, convierte su clave de entrada y los valores en las líneas pares y alimenta las líneas de la entrada estándar (STDIN) del proceso. En el ínterin, el reductor recoge la línea de productos orientada a la salida estándar (STDOUT) del proceso, convierte cada línea en un par de clave/valor, que se recoge en la salida del reductor. De forma predeterminada, el prefijo de la línea hasta el primer carácter de tabulación es la clave y el resto de la línea (excluyendo el carácter de tabulación) es el valor. Sin embargo, esta puede ser personalizada según necesidades específicas.
Parámetros | Descripción |
---|---|
-Directorio de entrada/nombre de archivo | Mapa de ubicación de entrada. (Obligatorio) |
-Directorio de salida de nombre | Ubicación de salida por reductor. (Obligatorio) |
-Mapper ejecutable o script o JavaClassName | Mapa ejecutable. (Obligatorio) |
-Reductor ejecutable o script o JavaClassName | Reductor ejecutable. (Obligatorio) |
-Archivo nombre de archivo | Hace que el mapa, el reductor, ejecutable o combinadora disponible localmente en los nodos de cálculo. |
-Inputformat JavaClassName | Clase de retorno debe pares clave/valor de texto clase. Si no se especifica, TextInputFormat se utiliza como valor predeterminado. |
-Outputformat JavaClassName | Clase de debe tener pares clave/valor de texto clase. Si no se especifica, TextOutputformat se utiliza como valor predeterminado. |
-Partitioner JavaClassName | Clase que determina qué reducir la clave es enviado a. |
-Combinador o JavaClassName streamingCommand | Combinador ejecutable de salida del mapa. |
-Cmdenv nombre=valor | Pasa la variable de entorno a los comandos de streaming. |
-Inputreader | Para mantener la compatibilidad: especifica un registro clase de lector (en lugar de un formato de entrada clase). |
-Verbose | Resultados detallados. |
-Lazyoutput | Crea una salida perezosamente. Por ejemplo, si el formato de salida se basa en FileOutputFormat, el archivo de salida se crea sólo en la primera llamada a la salida.recoger (o el contexto.write). |
-Numreducetasks | Especifica el número de reductores. |
-Mapdebug | Script para llamar al mapa tarea falla. |
-Reducedebug | Secuencia de comandos para llamar al reducir tarea falla. |