Posts in Category: ferramentas

Introdução ao MapReduce, com exemplo de sintaxe escrita em Java

Seguindo o primeiro post sobre o HDFS, agora vamos para o Mapreduce. O segundo componente do Hadoop. Ele oferece uma abstração para que os desenvolvedores realizem cálculos e análises, ocultando detalhes de paralelismo, com balanceamento de carga e tolerância a falhas. Vale especificar duas palavras neste parágrafo:

Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software.

Computação paralela é uma forma de computação em que vários cálculos são realizados ao mesmo tempo,[1] operando sob o princípio de que grandes problemas geralmente podem ser divididos em problemas menores, que então são resolvidos concorrentemente (em paralelo). Existem diferentes formas de computação paralela: em bit, instrução, de dado ou de tarefa. A técnica de paralelismo já é empregada por vários anos, principalmente na computação de alto desempenho, mas recentemente o interesse no tema cresceu devido às limitações físicas que previnem o aumento de frequência de processamento.[2] Com o aumento da preocupação do consumo de energia dos computadores, a computação paralela se tornou o paradigma dominante nas arquiteturas de computadores sob forma de processadores multinúcleo.[3]

Fonte: Wikipedia

Gosto de especificar estes detalhes porque quando nos deparamos com conceitos da computação, podem aparecer algumas confusões a respeito dos termos. O Mapreduce executa aplicações que processam um grande volume de dados em um cluster de milhares de nós, no hardware convencional. Implementado em java, executa programas em python, Ruby e C++. No ecossistema Hadoop existem outros programas que combinados com outras linguagens executam tarefas, como o Spark que falarei nos próximos meses. Por isso que é tão importante aprender o Hadoop. Você nunca o utilizará sozinho. Ele é a base de qualquer aprendizado em Big data, inclusive no momento em que nós nos desenvolvemos nos comandos de programação para fazer análises. 

Os termos comuns do Mapreduce são “job”, ou seja, o programa completo/uma aplicação e “tarefa”, a  execução de um mapper ou reducer sobre uma fatia dos dados. Existem três características do Mapreduce: a primeira delas é mover as tarefas, não os dados, a segunda é ser tolerância a falhas e, por fim, a escalabilidade linear. No processo, uma aplicação cliente submete um job ao nó mestre, em seguida o nó mestre se comunica com o NameNode para determinar a localização dos dados. Após isso, o nó mestre localiza os nós escravos próximo aos dados e o nó mestre submete as tarefas aos nós escravos. Veja este vídeo que mostra isso utilizando cartas! Na aula, a professora Rosângela Pereira também explicou com cartas como é o processo do Mapreduce. Mas sendo bem simplista, o Mapreduce divide o trabalho em tarefas para elas serem processadas independentemente.

Recuperação automática das tarefas que falham, redirecionamento das tarefas falhas para outros nós do cluster e escalabilidade linear são mais algumas vantagens do MapReduce. Eu já comentei no post anterior a importância da escalabilidade em big data que é manter o desempenho, mesmo com o aumento da carga, pela adição de mais recursos. 

As funções map e reduce:

Função Map

Função Reduce

Quem escreve?

Desenvolvedor

Desenvolvedor

Qual é o objetivo?

Obter um par de chave/valor e produzir um conjunto de pares-chave/valores

Receber uma chave intermediária, um conjunto de valores para essa chave

O que acontece?

A biblioteca Mapreduce agrupa todos os valores intermediários associados à mesma chave intermediária e os transmite para a função reduce

Mescla esses valores para formar um conjunto final consolidando esses valore

Quais os tipos de análise nós podemos fazer? Mineração de texto, reconhecimento de padrões, análise de sentimento, análise de risco, modelos preditivos e filtragem colaborativa. Este último vale destacar como uma das técnicas popularizadas pela Amazon ao recomendar novos itens de compra para o usuário, de acordo com a sua colaboração. Isto também foi popularizado por sites com o Globo.com que tem um bom case da área. Observe no fluxograma como funciona o programa “Wordcount”. Primeiro ele divide os dados (split), ordena em tarefas map (ou as identifica), embaralha (shuffing), ordena em tarefas reduce e apresenta o resultado final.

Modelo de programação

Mapreduce job na implementação do wordcoun
Chaves e valores                Base de dados em formato texto, está presente no HDFS
Classe Mapper Recebe uma linha de texto, faz a tokenização do texto em palavras, emite cada palavra no formato par como visto acima no <Bear, 1>.
Classe Reducer Em cada iteração, recebe todos os valores de uma chave. Faz a soma dos valores chave e emite para cada chave o par <palavra, soma>; como no exemplo acima <Bear, 2>
Classe Driver Configura o job, especifica o tamanho dos dados de entrada e saída, especifica as classes mapper e reducer. Por fim, executa o jo

Entenda melhor o que seriam chaves e valores:

Chave

Número de telefone

Registro das chamadas

Usuário do Facebook

Informações de perfil

Número de cartão de crédito

Suas transações

#PartiuJava

Acho que nunca vi uma linguagem tão temida numa sala de aula. Python? Beleza. R? Lindeza. Java? Divide opiniões. Acho que a questão é a complexidade da sintaxe, não sei. Não há julgamentos por aqui porque precisamos do java no Hadoop. O exemplo abaixo foi retirado da documentação do site oficial que tem mais detalhes das funções da sintaxe.

Exemplo do Wordcount que pode ser executado no programa Hue:

public class WordCount {
public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1);

private Text word = new Text();
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {      String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
output.collect(word, one);
}
}
}

Este post foi baseado livremente no material exclusivo de ensino da professora Rosângela Pereira, especialista em java. Não tem por intenção ensinar e sim compartilhar conhecimento. Use as fontes linkadas para aprender mais. 🙂

 

Ferramenta | Cloudera/Eclipse rodando liso no IOS High Sierra

Para contar palavras contidas em milhares de tweets, afim de fazermos análise com um grande volume de dados, nós podemos usar o programa ‘word count’ em hadoop/cloudera/eclipse. Daí que eu tenho um macbook air com 4G de memória que não é uma grande potência.

Depois de rondar muito a internet, eu achei o tutorial perfeito que não precisa usar o VMWare Fusion com trial de 30 dias.

  • Instale o Virtualbox. Pode dar um erro do tipo “fatal no bootable medium found system halted”, mas fique tranquilo. É por quê está faltando uma ISO que pode ser Windows (versão paga) ou Ubuntu (gratuito). 
  • Baixe o Ubuntu 64bits (se for o de 32 bits não vai rodar)
  • Depois, instale o Cloudera dentro do Virtualbox usando o Ubuntu (não precisa baixar o Ubuntu dentro do virtualbox, só usar sua ISO)

O passo a passo está neste vídeo.