Hadoop - Streaming



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.

Ejemplo usando Python

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.

Fase Código Mapa

!/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).

Fase Código reductor

#!/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.

Ejecución del Programa WordCount

$ $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.

Por ejemplo,

./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

Streaming Cómo Funciona

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.

Comandos importantes

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.
Advertisements