Big Data para leigos – Parte 2

Seguimos com a Parte 2 da série… se não viu a Parte 1, clique aqui.

A Abordagem
Hadoop

Hadoop foi concebido para processar eficientemente grandes volumes de informação, ligando muitos computadores convencionais em conjunto para funcionar em paralelo.
A máquina de 1000 CPUs teórica descrita anteriormente custaria uma quantidade muito grande de dinheiro, muito mais do que 1.000 máquinas com uma única CPU ou 250 máquinas com 4 CPUs.
O Hadoop vai amarrar essas máquinas menores em um único cluster de computação de baixo custo.

Comparação com Técnicas Existentes

Processamento de grandes volumes de dados não é algo novo, tendo sido feito em configurações de sistemas distribuídos.
O que torna o Hadoop único
é o seu modelo de programação simplificado, que permite ao usuário
escrever e testar sistemas distribuídos de forma rápida e eficiente, além da distribuição automática de dados e uso do paralelismo subjacente dos
núcleos de CPU.
Outras abordagens sofrem com a necessidade de gerenciar redes SAN de forma isolada do cluster de
processamento, e a colaboração entre os vários nós de
computação deve ser controlada por um sistema de comunicação específico, além de usar um modelo de programação mais complexo que pode levar à introdução de erros.

Distribuição de Dados

Em um cluster
Hadoop, os dados são distribuídos para todos os nós.
O Hadoop Distributed File System
(HDFS) irá dividir grandes arquivos de dados em pedaços que são
geridos por diferentes nós do cluster.
Além disso, cada pedaço é
replicado através de várias máquinas, de modo que uma falha única
na máquina não resulta em indisponibilidade dos dados.
Um sistema de controle ativo replica dos dados em
resposta a falhas do sistema, o que pode resultar em armazenamento
parcial.
Mesmo que os pedaços de arquivos sejam replicados e
distribuídos através de várias máquinas, eles formam um único
espaço de nomes, para que seus conteúdos sejam universalmente
acessíveis.
O dado é
conceitualmente um registro orientado no contexto de programação do Hadoop.
Arquivos de entrada individuais são divididos em linhas ou em outros
formatos específicos para a lógica do aplicativo.
Como os arquivos
estão espalhados por todo o sistema de arquivos distribuídos em partes, cada processo de computação em execução em um nó opera sobre um subconjunto dos dados.
Os dados processados por cada nó são escolhidos com base em sua localidade, e a maioria dos dados
são lidos a partir do disco local direto para o CPU, aliviando a
pressão sobre a largura de banda de rede e impedindo as
transferências desnecessárias.
Esta estratégia de levar a computação para os dados, em vez de levar os dados para a computação, permite ao Hadoop alcançar níveis elevados de
processamento de dados locais, o que, por sua vez, resulta em alto desempenho.
Os dados são distribuídos entre os nós em tempo de
carregamento.

Map Reduce: Processos Isolados

O Hadoop limita a
quantidade de comunicação que pode ser realizada pelos processos, e como cada registro individual é processado por tarefas isoladas.
Embora soe como limitação
no início, esta abordagem torna o processamento muito mais confiável. 
O Hadoop não toma todo o código e simplesmente distribui através de um
cluster.
O código deve ser escrito de acordo com um
modelo de programação particular, denominado “Map Reduce.”
Neste modelo, os registros são processados em isolamento por tarefas
chamadas Mappers.
A saída é, então, encaminhada para um
segundo conjunto de tarefas, chamadas Reducers, onde os resultados
de diferentes Mappers podem ser agrupados.
Tarefas Map Reduce são executadas em nós onde os
registros de dados já estão presentes.

Nós separados de
um cluster Hadoop ainda se comunicam uns com os outros.
No entanto, em
contraste com sistemas distribuídos convencionais, onde os
desenvolvedores de aplicativos explicitam os fluxos de bytes de nó em nó em soquetes ou através de buffers, a
comunicação em Hadoop é realizada de forma implícita.
Partes dos dados podem ser marcadas com os nomes das chaves que informam ao Hadoop
como enviar os bits de informação relacionados para um nó de destino.
O Hadoop administra internamente todas as questões de
transferência de dados e de topologia do cluster.
Ao restringir a
comunicação entre nós, o Hadoop torna o sistema distribuído muito
mais confiável. 
Falhas de nós, individualmente, podem ser
contornadas reiniciando tarefas em outras máquinas.
Como as tarefas
em nível de usuário não se comunicam de forma explícita, não há mensagens que precisam ser trocadas pelas aplicações, nem nós que precisam realizar checkpoints e reiniciar parcialmente o processamento.
As outras tarefas continuam a operar como se nada tivesse acontecido, deixando os
aspectos desafiadores de reiniciar parcialmente a aplicação para a
camada subjacente do Hadoop.

Escalabilidade

Um dos principais
benefícios da utilização Hadoop em contraste com outros sistemas
distribuídos é a sua curva suave de escalabilidade.
Executar o Hadoop
em uma quantidade limitada de dados em um pequeno número de nós
pode não demonstrar um desempenho que chame a atenção, dada a
sobrecarga envolvida em iniciar uma aplicação Hadoop.
Outros paradigmas de programação distribuída e paralela,
como MPI (Message Passing Interface) podem atuar muito melhor em duas,
quatro, ou talvez uma dúzia de máquinas.
Embora o esforço de
coordenação do trabalho entre um pequeno número de máquinas seja melhor realizado por estes sistemas, o preço pago em desempenho
e engenharia (quando se adiciona mais hardware como
resultado do aumento do volume de dados) aumenta de forma não
linear.
Uma aplicação escrita em outras abordagens distintas do Hadoop pode exigir
grandes quantidades de refatoração quando se atinge escala de centena ou milhares de máquinas.
Isso pode envolver a reescrita da aplicação várias
vezes.
O Hadoop, por outro lado, é especificamente projetado para ter uma curva de
escalabilidade muito suave.
Depois que um programa Hadoop é escrito e
funciona em dez nós, muito pouco – talvez nenhum – esforço é
necessário para que o mesmo programa seja executado em uma
quantidade muito maior de nós.
Várias ordens de magnitude de
crescimento podem ser geridas com pouco retrabalho em suas aplicações.
A plataforma Hadoop subjacente irá gerir os
recursos de dados e hardware e oferecer desempenho confiável e crescimento proporcional ao número de máquinas disponíveis.

Conclusão

Como se pode ver, o Hadoop foi pensado para grandes aplicações distribuídas, tendo um foco em facilitar o crescimento da aplicação.
Isto é particularmente interessante no mundo atual, em que proliferam startups que podem ter crescimento muito acelerado, sendo o Hadoop, portanto, uma solução moderna, na medida em que se adequa às necessidades das empresas que mais crescem no mercado de TI atual.
Por outro lado, o Hadoop pode não ser a melhor opção para empresas cuja realidade não envolva crescimento e cujo volume de dados não demande clusters com centenas ou milhares de nós.
É fundamental, então, como em qualquer projeto de análise de dados, estar atento ao cenário atual e futuro da organização para determinar se o Hadoop representa a melhor alternativa em cada caso.
E você, o que pensa a respeito de escalabilidade ? Fala aí!

Ah! E se já leu o ebook e assistiu a palestra, não deixe de comentar aqui o que achou!