Hadoop - Streaming



Hadoop streaming é um utilitário que vem com o Hadoop. Este utilitário permite que você criar e executar Mapa/reduzir trabalhos com qualquer arquivo executável ou script conforme o mapa e/ou o redutor.

Exemplo usando Python.

A Hadoop streaming, estamos considerando a palavra-count problema. Qualquer trabalho em Hadoop tem duas fases: mapa e redutor. Temos escritos os códigos para o mapa e o redutor em python script para executá-lo com Hadoop. Pode-se também escrever o mesmo em Perl e Ruby.

Código Fase 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)

Certifique-se de que este ficheiro tem permissões de execução (chmod +x /home/ expert/hadoop-1.2.1/mapper.py).

Código Fase Redutor

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

Salve o mapa e o redutor códigos no mapa.py e redutor.py no Hadoop home directory. Certifique-se de que esses arquivos têm permissões de execução (chmod +x mapper.py and chmod +x reducer.py). Como python é sensível recuo para que o mesmo código pode ser baixado no link abaixo.

Execução do 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

Onde "\" é usado para a linha manutenção para limpar a legibilidade.

Por exemplo,

. /Bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -entrada myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py

Como Funciona o Streaming

No exemplo acima, o mapa e o redutor são python scripts que ler a entrada da entrada padrão e emitem a saída para a saída padrão. O utilitário irá criar um mapa/reduzir o número de postos de trabalho, apresentar o trabalho de um cluster, e monitorar o progresso do trabalho, até que seja concluído.

Quando um script é especificado para mapas, cada mapa tarefa irá lançar o script como um processo separado quando o mapa é inicializado. Conforme o mapa tarefa será executada, converte suas entradas em linhas e as linhas de alimentação da entrada padrão (STDIN) do processo. Entretanto, o mapeador recolhe a linha orientada saídas da saída padrão (STDOUT) do processo e converte cada linha em um par chave/valor, que são recolhidos como a saída do mapa. Por padrão, o prefixo de uma linha até o primeiro caractere de tabulação é a chave e o restante da linha (excluindo o caractere de tabulação) será o valor. Se não houver um caractere de tabulação a linha e, em seguida, toda a linha é considerada como a chave e o valor é nulo. No entanto, isto pode ser personalizada, como por uma necessidade.

Quando um script é especificado para redutores redutor cada tarefa vai lançar o script como um processo separado, o redutor é inicializado. Como o redutor tarefa é executado, ele converte sua chave de entrada/valores pares em linhas e alimenta as linhas para a entrada padrão (STDIN) do processo. Entretanto, a redutor recolhe a linha-orientadas saídas da saída padrão (STDOUT) do processo, converte cada linha em um par chave/valor, que são recolhidos como a saída do redutor. Por padrão, o prefixo de uma linha até o primeiro caractere de tabulação é a chave e o restante da linha (excluindo o caractere de tabulação) é o valor. No entanto, este pode ser personalizado conforme necessidades específicas.

Comandos Importantes

Parâmetros Descrição
-Entrada diretório/arquivo-name Local de entrada para o mapa. (Obrigatório)
-Diretório de saída-name Local de saída do redutor. (Obrigatório)
-Mapper executável ou script ou JavaClassName Mapper executável. (Obrigatório)
-Redutor executável ou script ou JavaClassName Redutor executável. (Obrigatório)
-Arquivo de nome Faz com que a mapper, redutor de velocidade, ou executável combinador disponíveis localmente em nós de computação.
-Inputformat JavaClassName Classe você deve retornar pares chave/valor do texto classe. Se não for especificado, TextInputFormat é usado como padrão.
-Outputformat JavaClassName Classe que alimentação deve ter pares chave/valor do texto classe. Se não for especificado, TextOutputformat é usado como padrão.
-Particionador JavaClassName Classe que determina reduzir uma chave é enviada.
-Combinador streamingCommand ou JavaClassName Combinador executável para saída do mapa.
-Cmdenv nome=valor Passar a variável de ambiente para transmitir os comandos.
-Inputreader A retro-compatibilidade: especifica um registro classe do leitor (em vez de um formato de entrada classes).
-Verbose Verbose output.
-Lazyoutput Cria uma saída supriram. Por exemplo, se o formato de saída é baseada em FileOutputFormat, o arquivo de saída é criado apenas com a primeira chamada para a saída.recolher (ou contexto.escrever).
-Numreducetasks Especifica o número de redutores.
-Mapdebug Script de chamada quando mapa tarefa falhar.
-Reducedebug Script de chamada quando reduzir tarefa falhar.
Advertisements