Buscar

A2 Frameworks para Big Data

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

FRAMEWORK PARA BIG DATA
HADOOP MAPREDUCE
Introdução
Olá. Nesta unidade você conhecerá alguns recursos mais avançados do Apache Hadoop. Como forma de exemplificar o uso da estrutura MapReduce, você verá uma aplicação prática do recurso com a linguagem de programação Python. Como forma de contextualização, uma visão geral sobre Python e a programação no paradigma orientado a objetos serão apresentadas. Veremos que, mesmo a interface do HDFS sendo padronizada para o sistema de arquivos Unix, nada impede que a mesma seja utilizada em outros tipos de sistemas. Por fim, utilizaremos um exemplo prático, onde será abordado o componente de streaming do Hadoop MapReduce. Para isso, você será apresentado aos conceitos básicos do Hadoop Streaming e verá um exemplo usando a linguagem Python. Bons estudos!
HADOOP STREAMING
Hadoop é um framework versátil voltado para Big Data. Baseado no conceito de Jobs, em que cada job é uma unidade de trabalho, as ferramentas que compõem a arquitetura Hadoop gerenciam diversos trabalhos e dados ao mesmo tempo. Com o fluxo de trabalho sendo feito em ambiente distribuído, diversos arquivos são processados ao mesmo tempo, mesmo que este framework não tenha sido criado para lidar com dados em tempo real.
Uma das ferramentas do framework da Apache é o Hadoop Streaming. Apesar deste nome, o termo streaming não tem a ver com fluxos de dados contínuos, como é geralmente entendido. De maneira simples, o Hadoop Streaming é “um utilitário que acompanha o Hadoop e permite que você desenvolva executáveis do MapReduce em linguagens diferentes de Java.” (AMAZON AWS, 2019, on-line). O Hadoop Streaming é apenas um utilitário fornecido pela distribuição Hadoop MapReduce que dá aos usuários a possibilidade de escrever tarefas MapReduce em outras linguagens de programação além do Java, como Python por exemplo.
Quando falamos sobre o uso de outras linguagens de programação, não queremos dizer que o código escrito nessas linguagens precise ser convertido para o código Java. Por exemplo, se o código original estiver em Python, não é necessário que o código seja convertido em Java usando ferramentas como Jython ou outro programa utilitário semelhante. O código Python pode ser executado direto no ecossistema Hadoop usando o Hadoop Streaming. Ou seja, por mais que o Hadoop MapReduce tenha sido idealizado para ser configurado e executado em Java, nada impede que outras linguagens possam ser utilizadas para executar as tarefas Map e Reduce.
Na documentação oficial da Apache Foundation a respeito do Hadoop Streaming, podemos observar que os exemplos são aplicados com classes em Java. Mas, independentemente da linguagem a ser utilizada, alguns pré-requisitos precisam ser respeitados como forma de organizar o ambiente antes da execução dos scripts iniciais. Um dos exemplos apresentado pela Apache na documentação oficial está representado a seguir:
No exemplo citado, Map e Reduce são executáveis que leem a entrada de stdin (inputs ou entrada de dados) e emitem a saída para stdout. O programa criará um job de MapReduce, enviará o job para um cluster apropriado que vai monitorar o andamento do trabalho até que seja concluído. De acordo com a própria documentação do Hadoop Streaming, quando um executável é especificado para mapeadores, cada tarefa do mapeador inicia o executável como um processo separado quando o mapeador é inicializado.
Conforme a tarefa do Map é executada, ela converte suas entradas em linhas e alimenta as linhas para a entrada do processo em stdin. Enquanto isso, o mapeador coleta as saídas orientadas linha a linha da saída do processo e converte cada linha em um par de chave/valor, que é coletado como a saída do mapeador.
Após isso, quando um executável é especificado para reducers (redutores), cada tarefa reduce inicia seu programa como um processo separado, e o redutor é inicializado. À medida que a tarefa redutora é executada, ela converte seus pares de chave-valores de entrada em linhas e alimenta as linhas para a entrada do processo Reduce. Enquanto isso, o redutor coleta as saídas orientadas linha a linha a partir da saída-padrão do processo stdout, convertendo cada linha em um par de chave-valor, que é coletado como a saída do redutor.
O exemplo apresentado na Figura 2.1 é a base do protocolo de comunicação entre a estrutura Map/Reduce e o mapeador/redutor de streaming, que dá nome à ferramenta Hadoop. O streaming suporta opções de comando de streaming, bem como opções de comando genéricas. Para melhor compreensão é importante ter como pré-requisitos, antes de mergulhar nos detalhes do Hadoop Streaming, conhecimentos no ecossistema Hadoop, como o Hadoop HDFS. Uma vez que pelo menos esse pré-requisito esteja configurado e limpo, podemos mergulhar nos detalhes do Hadoop Streaming e conseguir executar alguns exemplos.
O ambiente de teste e desenvolvimento de aplicação pode ser tanto em sistema operacional Linux, como Windows e até MAC OS (da Apple). Para isso é necessário apenas que o desenvolvedor se certifique de que está com todos os pré-requisitos necessários, analisando a documentação do Hadoop no site oficial da Fundação Apache.
O Fluxo de Trabalho Streaming
Para usar o Hadoop Streaming, o mapeador e o redutor precisam ser executáveis e devem poder ler as entradas chamadas stdin, linha por linha, e emitir a saída chamada stdout. A API de streaming do Hadoop criará e enviará uma tarefa MapReduce a partir dos executáveis definidos para o Mapper (mapeadores) e Reducers (redutores). Na inicialização de cada tarefa Map ou Reduce, um novo processo será iniciado com o executável correspondente.
Na sequência lógica do Hadoop Streaming, para cada dado de entrada, a tarefa do mapeador pega a entrada, linha por linha, e alimenta as linhas para o stdin do executável do mapeador. Depois de executado, as linhas do stdout são obtidas pelo mapeador e convertidas em um par de chave-valores, que será a saída da tarefa do mapeador, que é repassada para a tarefa redutora. Da mesma forma, o redutor pega o par de chave-valores e o converte em linhas, alimentando o executável do redutor usando stdin. Após a execução do redutor, ele novamente pega a linha de stdout e a converte no par de chave-valores a ser passado como o resultado final. A Figura 2.1 nos mostra novamente como o processo MapReduce é operado, com entrada e saída de dados.
É importante explicar que esse processo requer o entendimento de conceitos como o da lógica “chave-valor”. O modelo chave-valor é bastante empregado em bancos de dados não relacionais ou NoSQL. “Um banco de dados de chave-valor é um tipo de banco de dados não relacional que usa um método de chave-valor simples para armazenar dados” (AMAZON AWS, 2019, on-line). Esse modelo armazena os dados gerando um conjunto de pares chave-valor, em que cada chave funciona como identificador exclusivo (AMAZON AWS, 2019). Logo, uma chave representa unicamente cada valor associado, algo semelhante ao conceito de chave primária em bancos de dados no modelo Relacional (TANENBAUM, 2015). Como exemplo, observe a Figura 2.2.
No MapReduce, por padrão, o texto nas linhas até a primeira guia será considerado a chave e o restante da linha como valor. Caso não exista caractere de tabulação presente na linha, a linha inteira será usada como a chave e o valor será nulo. Mas esse comportamento não é obrigatório e pode ser alterado e o comportamento necessário pode ser configurado.
VAMOS PRATICAR
O framework Hadoop possui um utilitário chamado Hadoop Streaming. Ele é responsável por disponibilizar o ambiente de criação de executáveis com uso de MapReduce em outras linguagens além do Java. É possível utilizá-lo como uma extensão do Hadoop, através de um arquivo em formato JAR (Java Archive), que compacta os dados Java e permite a execução no servidor em que o serviço está instalado. 
Sobre a ferramenta Hadoop Streaming, assinale a alternativa correta:
Top of Form
a) É uma ferramenta que independe do Hadoop MapReduce.
b) É uma ferramenta de processamento em tempo real.
c) É apenas um utilitáriofornecido pelo Hadoop MapReduce.Feedback: alternativa correta, pois é um utilitário que faz parte do pacote de serviços do Hadoop MapReduce.
d) Ferramenta para realização das tarefas Map e Reduce em Java.
e) Ferramenta Hadoop é que faz a leitura coluna por coluna dos dados.
MapReduce com Python
Para exemplificar o uso do Streaming e justificar seu uso, vamos acompanhar um exemplo em outra linguagem que não seja Java. No caso, você verá a exemplificação utilizando a linguagem de programação Python. Mas, antes de mais nada, vamos apresentar um pouco melhor esta linguagem.
Exemplo com Python
Conforme introduzido no tópico anterior, usaremos a API de streaming para executar o código Python no Hadoop. Vamos usar o sys.stdin e sys.stdout em Python para ler os dados e gravar os dados de saída, tudo o mais será tratado pelo Streaming API em si.
O exemplo a ser apresentado é um clássico MapReduce chamado “Contador de palavras”. No programa de contagem de palavras, um monte de entrada de texto é fornecido para a função Mapper, que divide as linhas de texto em palavras simples e passa essas palavras como um par de chave-valores para as funções do Redutor. O redutor recebeu a entrada como o par chave-valor e conta o número de instâncias de uma palavra específica no texto de entrada fornecido, gerando os pares de chave-valores com a palavra como chave e o número de contagens como o valor. Para o exemplo, vamos implementar o mesmo número de palavras do exemplo- -padrão da documentação oficial do hadoop, mas em vez de usar a linguagem Java, usaremos Python e executaremos o trabalho MapReduce usando a API de streaming do Hadoop.
Mapeador
A função Mapper no Python:  lerá a linha de stdin, dividirá a linha nas palavras individuais e produzirá a palavra como par chave-valor com valor 1 e palavra como sendo a chave, por exemplo: <palavra, 1>. Veja os códigos a ser escrito a seguir:
O código em Python da lista, ao ser executado em prompt de comando executa a tarefa Map, com o arquivo salvo com o nome map.py. Para sua execução, deve-se verificar a permissão de leitura e execução para o arquivo Python.
Redutor
O Redutor levará a entrada do mapper.py através do stdin. O Redutor então soma a ocorrência de cada palavra e saída do arquivo saída, reduzida na forma de par de chave-valor, tendo a palavra específica como chave e o total de ocorrências da palavra como o valor. Por exemplo, <palavra, 5>. A tarefa Reduce é um pouco mais extensa, pois requer tratamento de dados que estão sendo recebidos. Observe na lista a seguir:
Vamos Praticar
“O Google introduziu a ideia de MapReduce como um modelo de programação para processar ou gerar grandes conjuntos de dados. No modelo canônico, uma função map processa pares de valores-chave, resultando em um conjunto intermediário de pares de valores-chave. Uma função reduce, processa estes pares de valores-chave, mesclando os valores para as chaves associadas” (JONES, 2010, on-line).
Dado o texto do enunciado a respeito do modelo de programação MapReduce, assinale a alternativa correta:
Top of Form
a) Os dados de entrada precisam ser de tipo numérico
b) Os dados de entrada podem ser divididos e processados em vários computadores.Feedback: alternativa correta, pois os dados de entrada são particionados de tal forma que possam ser distribuídos entre um cluster de máquinas para processamento em paralelo, o que agiliza o processo.
c) Dados considerados intermediários são processados em separado, um por vez.
d) Os dados de entrada são introduzidos primeiramente e distribuídos entre jobs Map.
e) As tarefas MapReduce podem ser implementadas em Python, mas os dados de saída retornam um código em Java.
MAPREDUCE AVANÇADO
Uma etapa importante, antes de enviar o código Python como tarefa MapReduce para um cluster Hadoop, é o teste do código para confirmar se ele funciona como deveria. É fácil garantir que o código funcione bem com um pequeno texto de entrada antes de enviar para o cluster para analisar grande quantidade de dados. Podemos realizar os dois testes seguindo as seguintes etapas:
· Código do mapeador: executando o comando no console Python, apresentado na lista a seguir, será executado o script no arquivo map.py com a sequência de entrada fornecida e poderemos confirmar que a saída é conforme o esperado.
Bottom of Form
· Código do redutor: a saída deve ser como mostrado na listagem a seguir, com o teste do código do redutor.
Como exemplo, podemos utilizar um livro digital como dados de entrada para o programa MapReduce. Um livro digital pode ser encontrado em muitos formatos. Fica mais fácil para a tarefa MapReduce que o livro seja no formato de codificação simples UTF-8, padrão de codificação que lê e aceita praticamente todos os idiomas e caracteres especiais como acentos e “ç” (cedilha), por exemplo.
O comando da lista coloca um arquivo chamado input.txt do sistema local para o HDFS no diretório raiz do servidor, com o mesmo nome input.txt (por isso a repetição do nome). Como nosso exemplo, o arquivo input.txt seria nosso livro digital.
Enviar o Trabalho MapReduce
Para executar o job no Hadoop Cluster, podemos usar a API de Streaming para que os dados possam ser transmitidos entre o Mapper e o Reducer usando stdin e stdout.
Depois que o trabalho for concluído, caso não apresente lançamento de exceções ou erros, será visto um log do console com a última linha mencionando o caminho em que a saída do job está armazenada. Algo semelhante ao apresentado na lista a seguir aparecerá em sua tela:
	# Retorno de logs de processos MapReduce
Map-Reduce Framework
Map input records=2205
Map output records=20379
Map output bytes=163288
Map output materialized bytes=204058
Input split bytes=214
Combine input records=0
Combine output records=0
Reduce input groups=4754
Reduce shuffle bytes=204058
Reduce input records=20379
Reduce output records=4754
Spilled Records=40758
Shuffled Maps =2
Failed Shuffles=0
Merged Map outputs=2
GC time elapsed (ms)=403
CPU time spent (ms)=3960
Physical memory (bytes) snapshot=579469312
Virtual memory (bytes) snapshot=4513931264
Total committed heap usage (bytes)=391979008
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=129908
File Output Format Counters
Bytes Written=50688
O log apresentado na lista acima é o fim do processo. Com o passo a passo, concluímos o ciclo começando com o entendimento do funcionamento básico da API de streaming do Hadoop e seu fluxo de trabalho completo.
Com os exemplos apresentados, você viu como o código MapReduce pode ser escrito em Python e como a API de streaming pode ser usada para executar os trabalhos no cluster Hadoop.
Vamos Praticar
Hadoop é a implementação mais conhecida e utilizada do modelo Mapreduce. O projeto foi desenvolvido tendo como foco o processamento em clusters com milhares de máquinas e sustentado sobre duas bases: Mapreduce, que provê as interfaces de programação; e HDFS (Hadoop Distributed File System), que fornece um sistema de arquivos distribuídos.
Sobre o uso prático de MapReduce em ambiente HDFS, assinale a alternativa correta:
Top of Form
a) Testes de código devem ser feitos antes de enviar o código Python como job MapReduce para o cluster Hadoop.Feedback: alternativa correta, pois antes de enviar o código Python como job MapReduce para o cluster Hadoop, é preferível testar o código para confirmar se funciona como exceção.
b) Não é fácil garantir que o código funcione bem com pequenos textos de entrada.
c) Os dados de entrada podem estar externos ao HDFS no momento da execução do script.
d) Uma vez que esteja no servidor HDFS, um arquivo pode ser processado pela tarefa Reduce sem passar pela Map.
e) O formato de arquivo em UTF-8 prejudica a leitura e escrita de caracteres especiais como acentos e ç (cedilha).
Conclusão
Nesta unidade você foi apresentado aos conceitos iniciais do Hadoop Streaming como um utilitário que acompanha a distribuição do framework Hadoop. Como utilitário, você viu que o Streaming permite criare executar tarefas de Map / Reduce (mapear/reduzir) com um programa executável através de scripts em outras linguagens de programação e não apenas a tradicional linguagem Java. Como exemplo prático, vimos o entendimento teórico ser colocado com a aplicação do “Contador de palavras” que, na verdade, em Python, apresentou de maneira simples como é possível enviar um job através da API Streaming. Como resultado, o interpretador apresenta em forma de log no console o job Hadoop que, finalmente, aparece como uma saída do job processado para uso posterior.
Bottom of Form

Continue navegando