a

Tecnologia que interessa!

Tecnologia da informação aplicada - por Christian Guerreiro.

Notícias e novidades em Tecnologia da Informação, Dicas de Apps para Android e iPhone, Big Data, Computação em Nuvem, Governança de TI, ITIL, COBIT, Segurança, Software Livre, Virtualização

Página do Tecnologia que Interessa no Facebook! Twitter do Tecnologia que Interessa! Perfil Google+ de Christian Guerreiro - Tecnologia que Interessa!

segunda-feira, 27 de julho de 2015

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!
Mais...

Seguidores

Tecnologia do Blogger.