Hadoop Streaming: Escrevendo um programa Hadoop MapReduce em Python



Esta postagem do blog sobre Hadoop Streaming é um guia passo a passo para aprender a escrever um programa Hadoop MapReduce em Python para processar enormes quantidades de Big Data.

A quantidade de dados digitais gerados a cada dia está crescendo exponencialmente com o advento da Mídia Digital, Internet das Coisas entre outros desenvolvimentos. Este cenário deu origem a desafios na criação de ferramentas e tecnologias de próxima geração para armazenar e manipular esses dados. É aqui que entra o Hadoop Streaming! Abaixo está um gráfico que mostra o crescimento dos dados gerados anualmente no mundo a partir de 2013. A IDC estima que a quantidade de dados criados anualmente chegará a 180 Zetabytes em 2025!

data-by-2025-hadoop-streaming





Fonte: IDC

A IBM afirma que, todos os dias, quase 2,5 quintilhões de bytes de dados são criados, com 90 por cento dos dados mundiais criados nos últimos dois anos! É uma tarefa desafiadora armazenar uma quantidade tão extensa de dados. O Hadoop pode lidar com grandes volumes de dados estruturados e não estruturados com mais eficiência do que o data warehouse empresarial tradicional. Ele armazena esses enormes conjuntos de dados em clusters distribuídos de computadores. O Hadoop Streaming usa a estrutura MapReduce, que pode ser usada para escrever aplicativos para processar enormes quantidades de dados.



Como a estrutura MapReduce é baseada em Java, você deve estar se perguntando como um desenvolvedor pode trabalhar nela se não tiver experiência em Java. Bem, os desenvolvedores podem escrever aplicativos mapeadores / redutores usando sua linguagem preferida e sem ter muito conhecimento de Java, usando Hadoop Streaming em vez de mudar para novas ferramentas ou tecnologias como Pig e Hive.

O que é Hadoop Streaming?

O Hadoop Streaming é um utilitário que acompanha a distribuição do Hadoop. Ele pode ser usado para executar programas para análise de big data. O streaming do Hadoop pode ser executado usando linguagens como Python, Java, PHP, Scala, Perl, UNIX e muito mais. O utilitário nos permite criar e executar tarefas de Mapear / Reduzir com qualquer executável ou script como mapeador e / ou redutor. Por exemplo:

$ HADOOP_HOME / bin / hadoop jar $ HADOOP_HOME / hadoop-streaming.jar



-input myInputDirs

-output myOutputDir

-pasta / bin / cat

-redutor / bin / wc

Descrição dos Parâmetros:

Código Python MapReduce:

mapper.py #! / usr / bin / python import sys # Exemplo de contagem de palavras # entrada vem da entrada padrão STDIN para linha em sys.stdin: line = line.strip () #remove espaços em branco à esquerda e à direita palavras = line.split ( ) #dividir a linha em palavras e retornar como uma lista de palavras em palavras: #escrever os resultados na saída padrão STDOUT imprimir '% s% s'% (palavra, 1) #Emita a palavra

para que serve o fantoche

reducer.py

#! / usr / bin / python import sys from operator import itemgetter # usando um dicionário para mapear palavras para suas contagens current_word = None current_count = 0 word = None # input vem de STDIN para linha em sys.stdin: line = line.strip () palavra, contagem = linha.split ('', 1) tentativa: contagem = int (contagem) exceto ValueError: continuar se palavra_atual == palavra: contagem_atual + = contagem else: se palavra_atual: imprimir '% s% s'% (current_word, current_count) current_count = count current_count = word se current_word == word: imprimir '% s% s'% (current_word, current_count)

Corre:

  1. Crie um arquivo com o seguinte conteúdo e nomeie-o como word.txt.

Gato rato leão cervo tigre leão elefante leão cervo

  1. Copie os scripts mapper.py e reducer.py para a mesma pasta onde o arquivo acima existe.

  1. Abra o terminal e localize o diretório do arquivo. Comando: ls: para listar todos os arquivos no diretório cd: para alterar o diretório / pasta

  1. Veja o conteúdo do arquivo.
    Comando: gato nome do arquivo

> conteúdo de mapper.py

comando: cat mapper.py

> Conteúdo de reducer.py

comando: gato reducer.py

Podemos executar mapeador e redutor em arquivos locais (ex: word.txt). Para executar o Map e reduzir no Hadoop Distributed File System (HDFS), precisamos do Jar de streaming do Hadoop. Portanto, antes de executarmos os scripts no HDFS, vamos executá-los localmente para garantir que estejam funcionando bem.

> Execute o mapeador

comando: cat word.txt | python mapper.py

> Execute reducer.py

comando: cat word.txt | python mapper.py | sort -k1,1 | python reducer.py

Podemos ver que o mapeador e o redutor estão funcionando conforme o esperado, portanto, não enfrentaremos mais problemas.

Executando o Código Python no Hadoop

Antes de executarmos a tarefa MapReduce no Hadoop, copie os dados locais (word.txt) para HDFS

> exemplo: hdfs dfs -put source_directory hadoop_destination_directory

comando: hdfs dfs -put /home/edureka/MapReduce/word.txt / user / edureka

ordenar array c ++ ascendente

Copie o caminho do arquivo jar

O caminho do jar de streaming do Hadoop com base na versão do jar é:

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

Portanto, localize o jar do Hadoop Streaming em seu terminal e copie o caminho.

comando:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

Execute o trabalho MapReduce

qual é a estrutura da mola

comando:

hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file / home / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

O Hadoop fornece uma interface da web básica para estatísticas e informações. Quando o cluster do Hadoop estiver em execução, abra http: // localhost: 50070 no navegador. Aqui está a captura de tela da interface da web do Hadoop.

Agora navegue no sistema de arquivos e localize o arquivo wordcount gerado para ver a saída. Abaixo está a imagem.

Podemos ver a saída no terminal usando este comando

comando: hadoop fs -cat / user / edureka / Wordcount / part-00000

Agora você aprendeu como executar um programa MapReduce escrito em Python usando o Hadoop Streaming!

Edureka tem um curso ao vivo e ministrado por instrutor sobre Big Data e Hadoop, co-criado por profissionais do setor.

Tem alguma questão para nós? Mencione isso na seção de comentários e entraremos em contato com você.