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!
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:
- 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
- Copie os scripts mapper.py e reducer.py para a mesma pasta onde o arquivo acima existe.
- 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
- 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ê.