Introdução a Massively Parallel Processing (MPP)

filo01_Cartoonized_4Baseado em texto de Diwakar Kasibhotla

Em Bases de Dados MPP – Massively Parallel Processing (Processamento Paralelo Massivo), bancos de dados são particionados em vários servidores ou nós, com cada servidor / nó tendo memória / processador para processar dados localmente. Toda a comunicação é através de uma interconexão de rede – não há compartilhamento no nível do disco ou contenção para se preocupar (ou seja, é uma arquitetura sem compartilhamento – ‘shared-nothing’).

Vamos tentar explicar como trabalha um MPP usando um Banco de Dados Greenplum como um exemplo.

Nota: A Terminologia pode ser diferente de fabricante para fabricante, mas o conceito é o mesmo.

Observação: Greenplum foi uma grande empresa de análise de dados sediada em San Mateo, Califórnia. Greenplum foi adquirida pela EMC Corporation em julho de 2010.

O Greenplum HD tem 100% de código aberto e versão certificada e suportada da pilha Apache Hadoop, que inclui HDFS, MapReduce, Hive, Pig, HBase e Zookeeper. Apoiado pela maior organização de suporte Hadoop do mundo e testados em escala em um Workbench Analítico da Greenplum, com 1000 nós. Greenplum HD traz opções de armazenamento flexíveis para uma pilha (STACK) Hadoop enterprise-ready. Greenplum HD faz o Hadoop mais rápido, mais confiável e mais fácil de usar.

A saber:

MapReduce é um modelo de programação desenhado para processar grandes volumes de dados em paralelo, dividindo o trabalho em um conjunto de tarefas independentes. Programas MapReduce são escritos em um determinado estilo influenciado por construções de programação funcionais, especificamente expressões idiomáticas para listas de processamento de dados. Este módulo explica a natureza do presente modelo de programação e como ela pode ser usada para escrever programas que são executados no ambiente Hadoop.

Apache Hive é uma infraestrutura de data warehouse construído em cima do Hadoop para fornecer serviços de compactação de dados, consulta e análise.

Apache Pig é uma plataforma para análise de grandes conjuntos de dados que consiste em uma linguagem de alto nível para expressar programas de análise de dados, juntamente com a infraestrutura para a avaliação desses programas. A propriedade saliente de programas PIG é que sua estrutura é passível de paralelização substancial, que por sua vez lhes permite lidar com grandes conjuntos de dados.

Apache HBase é um Banco de Dados Distribuído, de fonte aberta, não-relacional, modelado com base no BigTable do Google e escrito em Java. É desenvolvido como parte do projeto Apache Hadoop da Apache Software Foundation e roda em cima do HDFS (Hadoop Distributed File System), fornecendo capacidades de trabalhar com grandes tabelas no Hadoop. Ou seja, ele fornece uma forma tolerante a falhas de armazenar grandes quantidades de dados esparsos (pequenas quantidades de informação selecionadas dentro de uma grande coleção de dados vazios ou sem importância, tais como encontrar os 50 maiores itens em um grupo de 2 bilhões de registros, ou encontrar os itens não nulos representam menos de 0,1% de uma enorme coleção.

ZooKeeper é um serviço centralizado para manter as informações de configuração, nomeadas, proporcionando sincronização distribuída, e prestação de serviços do grupo. Todos esses tipos de serviços são utilizados de uma forma ou de outra por aplicações distribuídas.

Hadoop é uma estrutura de software de código aberto para armazenamento de dados e execução de aplicativos em clusters de hardware commodity (Conveniência). Ele fornece armazenamento em massa para qualquer tipo de dados, enorme poder de processamento e capacidade de lidar com tarefas ou Jobs de forma simultânea, praticamente ilimitada.

  • Open-source software.Softwares Open Source são criados e mantidos por uma rede (network) de desenvolvedores ao redor do mundo. Tem o seu download livre usa contribuições para que cada vez mais versões comerciais do Hadoop estejam disponíveis.
  • Neste caso, significa que tudo o que for necessário para desenvolver e executar aplicações está disponível, sejam programas, conexões, etc.
  • Massive storage.O framework Hadoop quebra as grandes quantidades de dados em blocos, os quais são armazenados em clusters de hardwares.
  • Processing power.Hadoop processa simultaneamente grandes quantidades de dados usando vários computadores de ‘baixo custo’ para obter resultados rápidos.

Quais são os benefícios do Hadoop?

 Uma das principais razões que as organizações se voltam para Hadoop é a sua capacidade de armazenar e processar grandes quantidades de dados – qualquer tipo de dados – rapidamente. Com volumes e variedades de dados constantemente a aumentar, especialmente a partir de mídias sociais e da Internet, isso é uma questão fundamental. Outros benefícios incluem:

  • Computing power.(Poder de Computação). Seu modelo de computação distribuída processa rapidamente as grandes quantidades de dados. Quanto mais nós de computação usarmos, mais poder de processamento teremos.
  • (Flexibilidade). Ao contrário de bancos de dados relacionais tradicionais, não precisamos pré-processar os dados antes de guardá-lo. Podemos armazenar tantos dados quanto quisermos e decidir como usá-lo mais tarde. Isso inclui dados não estruturados, como texto, imagens e vídeos.
  • Fault tolerance.(Tolerância a Falhas). Os dados e processamento de aplicativos são protegidos contra falhas de hardware. Se um nó cai, os trabalhos são automaticamente redirecionados para outros nós para garantir que a computação distribuída não falhe. E ele armazena automaticamente várias cópias de todos os dados.
  • Low cost.(Baixo Custo). O framework open-source é gratuito e usa hardware, relativamente de baixo custo, para armazenar grandes quantidades de dados.
  • Scalability. (Escalabilidade). Pode-se, facilmente, crescer o sistema simplesmente adicionando mais nós. Pouca administração é necessária.

Um pouco da história Hadoop

Tudo começou com a World Wide Web. Como a web cresceu em finais de 1900 e início de 2000, os motores de busca e os índices foram criados para ajudar a localizar informações relevantes em meio ao conteúdo baseado em texto. Nos primeiros anos, os resultados de busca realmente foram devolvidos por seres humanos. Mas, como a web cresceu a partir de dezenas de milhões de páginas, foi necessária a automação. Motores de Busca foram criados, muitos com finalidades de projetos de pesquisa liderada pelos universitários, e o desenvolvimento de novas empresas direcionadas ao desenvolvimento de motores de pesquisa começaram a decolar (Yahoo, AltaVista, etc.).

Um desses projetos foi um motor de busca na web de código aberto chamado Nutch – ideia de Doug Cutting e Cafarella Mike. Eles queriam inventar uma maneira de retornar resultados de pesquisa da web mais rápido com a distribuição de dados e cálculos em diferentes computadores para várias tarefas poderem ser realizadas simultaneamente. Durante esse tempo, outro projeto de motor de busca chamado Google estava em andamento. Foi baseado no mesmo conceito – armazenamento distribuído e processamento de dados em um modo automatizado para que os resultados da pesquisa na web pudessem ser devolvidos mais rápido.

Em 2006, Cutting se juntou à Yahoo e levou com ele o projeto Nutch, bem como ideias com base no trabalho pioneiro do Google como a automatização do processamento e o armazenamento de dados distribuídos. O projeto Nutch foi dividido. A porção motor de busca (web crawler) permaneceu como Nutch. A computação e processamento distribuído tornou-se o Hadoop (o mesmo nome do Elefante de brinquedo do filho do Cutting). Em 2008, o Yahoo lançou Hadoop como um projeto open-source. Hoje, o framework Hadoop bem como um ecossistema de tecnologias a ele associados, são gerenciados e mantidos pela organização sem fins lucrativos Apache Software Foundation (ASF), uma comunidade global de colaboradores e desenvolvedores de software.

Voltando ao MPP

Vamos começar usando um exemplo de conjunto de dados demonstrando seu particionamento:

ID PRODUTO        NOME DO PRODUTO

  1.                             APPLE MACBOOK PRO
  2.                             APPLE IPHONE 4S
  3.                             APPLE IPAD 3
  4.                              SAMSUNG GALAXY TAB 10.1
  5.                              BLACKBERRY BOLD
  6.                              AMAZON KINDLE FIRE
  7.                             GOOGLE ANDROID TABLET 9”
  8.                             NOOK COLOR
  9.                             LENOVO IDEAL PAD

 

Abaixo um exemplo da arquitetura física de uma base de dados Greenplum:

Nota: esta configuração é apenas usada para demonstrar o funcionamento de um Banco de Dados Greenplum.

MPP1

  

Master Host– Servidores físicos separados com seus próprios Sistemas Operacionais, CPU, Armazenamentos e Memória. Hospeda o Banco de Dados Mestre. Não existe dados de usuários no Servidor mestre, mas metadados sobre os segmentos (pensando em termos de tabelas).

2, 3, 4 Segment hosts – Servidores Físicos Individuais, com seus próprios Sistemas Operacionais, CPU, Armazenamentos e Memória, hospeda segmentos do Banco de Dados, com os dados dos usuários.

5 Interconnect switch – Os Servidores com os segmentos de Banco de dados se comunicam através de um interconnect switch.

Como mencionado anteriormente a principal característica do banco de dados do MPP é a distribuição dos Dados.  Os dados são distribuídos em cada segmento de banco de dados para alcançar os dados e o processamento paralelo. Isto é conseguido através da criação de uma tabela de banco de dados com a cláusula DISTRIBUTED BY (DISTRIBUÍDO POR). Ao utilizar essa cláusula, os dados são automaticamente distribuídos entre os segmentos de bancos de dados.

No Greenplum pode-se usar tanto uma distribuição em hash como uma distribuição round-robin.

Uma função hash é um algoritmo que mapeia dados de comprimento variável para dados de comprimento fixo. Os valores retornados por uma função hash são chamados valores hashcódigos hashsomas hash (hash sums), checksums ou simplesmente hashes.

Um hash (ou escrutínio) é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal, que permite a visualização em letras e números (0 a 9 e A a F), representando um nibble (uma sucessão de quatro cifras binárias) cada. O conceito teórico diz que “hash é a transformação de uma grande quantidade de dados em uma pequena quantidade de informações”.

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.

Round-robin (RR) é um dos algoritmos mais simples de agendamento de processos em um sistema operacional, que atribui frações de tempo para cada processo em partes iguais e de forma circular, manipulando todos os processos sem prioridades. Escalonamento Round-Robin é simples e fácil de implementar.

Este escalonamento também pode ser aplicado em outros problemas de agendamento, como agendamento de transmissão de pacotes de dados em redes de computadores. O nome do algoritmo vem do princípio de round-robin conhecido em outras áreas, aonde cada pessoa compartilha igualitariamente uma determinada tarefa.

O funcionamento deste algoritmo acontece da seguinte forma: uma unidade de tempo, denominada quantum, é definida pelo sistema operacional, que determina o período de tempo entre cada sinal de interrupção.

Neste exemplo, usaremos hash para distribuir os dados entre os segmentos de bancos de dados. Para manter uma distribuição equalizada de dados em todos os segmentos, faz sentido usar a chave primária como chave de distribuição.

CREATE TABLE     PRODUCT_DIM
(ID_PRODUTO                    integer,
NOME_PRODUTO             varchar(200))
DISTRIBUTED BY (ID_PRODUTO);

Uma vez que a tabela tenha sido criada, vamos inserir os 9 registros, acima definidos, e ver como fica a distribuição baseada no Hashing do ID_PRODUTO.

insert into product_dim values (1,’Apple MacBook Pro’);
insert into product_dim values (2,’Apple Iphone 4s’);
insert into product_dim values (3,’Apple Ipad 3′);
insert into product_dim values (4,’Samsung Galaxy Tab 10.1′);
insert into product_dim values (5,’Blackberry Bold’);
insert into product_dim values (6,’Amazon Kindle Fire’);
insert into product_dim values (7,’Google Android Tablet 9′);
insert into product_dim values (8,’Nook Color’);
insert into product_dim values (9,’Lenovo IdeaPad’);

Como a chave de distribuição foi ID_PRODUTO, à medida que os dados são criptografados (HASH), são distribuídos uniformemente em cada segmento de Banco de Dados. Agora vamos consultar o banco de dados e ver como a distribuição dos dados ajuda no desempenho da consulta.

MPP2

Caso I: Selecionar dados de um produto

select * from product_dim where id_produto = 5;

Quando esta consulta for disparada, o mestre irá analisar e construir um plano de consulta. Uma vez que a consulta está a ser filtrada por uma coluna de chave de distribuição, o plano será enviado ao segmento de banco de dados 2 para execução – lembre-se o armazenamento mestre possui todas as informações (metadados) sobre a distribuição de dados para cada tabela. Após a consulta ser emitida para o segmento de banco de dados 2, iremos ler apenas três registros para chegar ao resultado em comparação com 9 registros em um banco de dados único, fazendo a consulta executar mais rápido.

Case II: Select data for 2 products

select * from product_dim where id_produto in (1,6);

Quando esta consulta é emitida, o mestre irá analisar e construir um plano de consulta. Uma vez que a consulta está sendo filtrada por uma coluna de chave de distribuição o plano será enviado para o segmento de banco de dados 1 e segmento de banco de dados 3 para execução – lembre-se o armazenamento mestre possui todas as informações (metadados) sobre a distribuição de dados para cada tabela. Após a consulta ser emitida para o segmento de banco de dados, cada processo paralelo tem para fazer a varredura de apenas 3 registros para chegar ao resultado. Conjuntos de dados de ambas as consultas é devolvido ao Mestre. O Mestre agrupa os dados em conjunto para apresentar ao usuário.

Principais pontos de Atenção

 Servidores físicos autossuficientes para armazenar e processar dados

 Os dados são fisicamente distribuídos em bancos de dados individuais separados

 Arquitetura Não Compartilhada (Shared Nothing)

Até a próxima!smurf

2 Respostas to “Introdução a Massively Parallel Processing (MPP)”

  1. kessefbr Says:

    Oi Lito, aqui é o Juliano que faz sua webrádio. Entrei esses dias e vi que está mudo, sem som, tentei te avisar por email , mas voltou seu email. abrs

    • Carlos Alberto Lorenzi Lima Says:

      Juliano, tudo bem!!!

      Pois é , meu caro, meu email mudou para litolorenzi@gmail.com, com isso esqueci de avisar a empresa Acquahost, e fiquei sem receber os avisos de vencimento… Pretendo regularizar o quanto antes, o pior é que esqueci de avisar também a empresa americana que é responsável pelo streamer da radioalternativa…. Vou correr para recuperar o prejuízo, mas com calma, pois a situação esta complicada para todos nós…hehehe…
      Obrigado pela lembrança e gentileza!!!!
      Abração!!!
      Lito


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: