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