Posts Tagged ‘cluster’

Hadoop – Introdução

junho 16, 2009

Pessoal,
Começa aqui uma série de posts sobre o Hadoop.

logo_hadoop

Farei este primeiro post no formato de perguntas e respostas, para tentar deixar mais dinâmico e facilitar o entendimento sobre o assunto, espero que gostem. 🙂

O que é esse tal de Hadoop?

O Hadoop é um framework open source desenvolvido em Java, para rodar aplicações, que manipulem uma grande quantidade de dados, em ambientes “clusterizados”.

Nossa! Não entendi nada, você poderia explicar de novo?

Normal, eu também demorei um tempo para entender o que realmente é o Hadoop (já que entrei de gaiato e curioso nesse novo mundo).

Bem, então para explicar melhor, vou te apresentar o problema que motivou o desenvolvimento do Hadoop:

Você está desenvolvendo um site de busca (alá Google) e as informações que você irá buscar estão dispersas em várias máquinas diferentes, como você irá realizar esse processamento?

  1. Vou comprar um supercomputador e processar localmente;
  2. Vou consultar o Larry Page e o Sergey Brin;
  3. Vou distribuir o processamento entre várias máquinas, utilizando o Hadoop.

Essa foi fácil hein!

Lógico que você irá utilizar o Hadoop (alternativa 3), afinal das contas, ele foi criado justamente visando suprir essas necessidades:

  • Oferecer um framework que possa auxiliar o desenvolvedor no desenvolvimento de sua aplicação;
  • Processar uma grande quantidade de dados;
  • Processar de forma distribuída esses dados, utilizando clusters.

Legal! Mas quais são as características do Hadoop?

Segue abaixo as principais características do Hadoop.

  • Escalável: ele pode armazenar e processar petabytes sem problemas;
  • Econômico: o Hadoop distribui os dados e o processamento através dos clusters. Estes clusters podem ter milhares de nós (máquinas);
  • Eficiente: Por distribuir os dados, o Hadoop pode processar eles em paralelo por meio dos nós, onde os dados estão alocados. Isto é feito de forma extremamente rápida;
  • Confiável: ele automaticamente mantém múltiplas copias dos dados e automaticamente  remaneja as tarefas em caso de falhas.

O Hadoop tem alguma coisa haver com o MapReduce?

Sim, aliás, ele é baseado no modelo de programação MapReduce, que foi desenvolvido pelo Google.

Fluxo conceitual do processo MapReduce (fonte)

Fluxo conceitual do processo MapReduce

Ele o responsável por dividir os dados de entrada em blocos independentes, que são processados de forma completamente paralela, pelas chamadas map tasks (traduzindo ao pé da letra, tarefas de mapeamento). Ele ordena as saídas das map tasks, que são os dados de entrada das reduce tasks (traduzindo ao pé da letra, tarefas de redução). Normalmente tanto a entrada quanto a saída da tarefa são armazenadas no sistema de arquivo. O MadReduce se encarrega de agendar as tarefas, monitorar e “reexecutar” em caso de falha.

Você falou sobre o sistema de arquivo, como ele funciona, já que os dados são processados e estão distribuídos?

Quem cuida dessa parte é o HDFS (Hadoop Distributed File System), que foi baseado no GFS (Google File System).

Como o próprio nome já sugere, ele é um sistema de arquivo distribuído. O interessante é que quando fosse for desenvolver a sua aplicação você não precisa se preocupa com isso, o próprio Hadoop se encarrega dessa tarefa, ou seja, para a sua aplicação, isso é transparente, seria como se os dados estivessem armazenados localmente.

O HDFS é focado em garantir alto gerenciamento, confiabilidade, usabilidade e desempenho. Para se ter idéia, por default a replicação dos dados ocorre em dois nós: uma no próprio nó (ou seja, são duas: dado original + o replicado) e outra em um diferente.

Show de bola! Como posso aprender mais sobre ele?

Pretendo escrever mais sobre o Hadoop, em um futuro breve. Mas enquanto isso você pode se aventurar por esses sites (todos em inglês) abaixo:

http://hadoop.apache.org/

Site oficial do Hadoop.

http://www.cloudera.com/

Tem muita informação sobre o Hadoop, destaque para os vídeos explicando sobre ele e a VM (Virtual Machine) que é disponibilizada gratuitamente com o Hadoop já instalado e configurado no Ubuntu.

http://wiki.apache.org/hadoop/

Wiki do Hadoop.

http://www.ibm.com/developerworks/linux/library/l-hadoop/index.html

Introdução do Hadoop feita pelo Ken Mann e pelo M. Tim Jones.

Fonte:

http://hadoop.apache.org/

www.sprace.org.br/Twiki/pub//Main/SergioLietti/future_hadoop.pdf

http://wiki.apache.org/hadoop/

http://hadoop.apache.org/core/docs/current/hdfs_design.html

http://www.ibm.com/developerworks/linux/library/l-hadoop/index.html

Pessoal,

Começa aqui uma série de posts sobre o Hadoop.

E farei este primeiro post no formato de perguntas e respostas, para tentar deixar mais dinâmico e facilitar o entendimento sobre o assunto, espero que gostem. 🙂

O que é esse tal de Hadoop?

O Hadoop é um framework open source desenvolvido em Java, para rodar aplicações, que manipulem uma grande quantidade de dados, em ambientes clusterizados.

Nossa! Não entendi nada, você poderia explicar de novo?

Normal, eu também demorei um tempo para entender o que realmente é o Hadoop (já que entrei de gaiato e curioso nesse novo mundo).

Bem, então para explicar melhor, vou te apresentar o problema, que acredito que seja o que motivou o desenvolvimento do Hadoop:

Você está desenvolvendo um site de busca (alá Google) e as informações que você irá buscar estão dispersas em várias máquinas diferentes, como você irá realizar esse processamento?

1. Vou comprar um supercomputador e processar localmente;

2. Vou consultar o Larry Page;

3. Vou distribuir o processamento entre várias máquinas, utilizando o Hadoop.

Esse foi fácil hein!

Lógico que você irá utilizar o Hadoop (alternativa 3), afinal das contas, ele foi criado justamente visando suprir essa necessidade:

· Oferecer um framework que possa auxiliar o desenvolvedor no desenvolvimento de sua aplicação;

· Processar uma grande quantidade de dados;

· Processar de forma distribuída esses dados, utilizando clusters.

Legal! Mas quais são as características do Hadoop?

Segue abaixo as principais características do Hadoop.

· Escalável: ele pode armazenar e processar petabytes sem problemas;

· Econômico: o Hadoop distribui os dados e o processamento através dos clusters. Este clusters podem ter milhares de nós (máquinas).

· Eficiente: Por distribuir os dados, o Hadoop pode processar eles em paralelo por meio dos nós, onde os dados estão alocados. Isto é feito de forma extremamente rápida.

· Confiável: ele automaticamente mantém múltiplas copias dos dados e automaticamente remaneja as tarefas em caso de falhas.

O Hadoop tem alguma coisa haver com o MapReduce?

Sim, aliás ele é baseado no modelo de programação MapReduce, que foi desenvolvido pelo Google.

É ele o responsável por dividir os dados de entrada em blocos independentes, que são processados de forma completamente paralela, pelas chamadas map tasks (traduzindo ao pé da letra, tarefas de mapeamento). Ele ordena as saídas das map tasks, que são os dados de entrada das reduce tasks (traduzindo ao pé da letra, tarefas de redução). Normalmente tanto a entrada quanto a saída da tarefa são armazenadas no sistema de arquivo. O MadReduce se encarrega de agendar as tarefas, monitorar e re-executar em caso de falha.

Você falou sobre o sistema de arquivo, como ele funciona, já que os dados são processados e estão distribuídos?

Quem cuida dessa parte é o HDFS (Hadoop Distributed File System), que foi baseado no GFS (Google File System).

Como o próprio nome já sugeri ele é um sistema de arquivo distribuído. O interessante é que quando fosse for desenvolver a sua aplicação você não precisa se preocupa com isso, o próprio Hadoop se encarrega dessa tarefa, ou seja, para a sua aplicação, isso é transparente, seria como se os dados estivessem armazenados localmente.

E o HDFS é focado em garantir alto gerenciamento, confiabilidade, usabilidade e desempenho. Para se ter idéia, por default a replicação dos dados ocorre em dois nós: uma no próprio nó (ou seja são duas, dado original + o replicado) e outra em um diferente.

Nossa show de bola! Como posso aprender mais sobre ele?

Pretendo escrever mais sobre o Hadoop, em um futuro breve. Mas enquanto isso você pode se aventurar por esses sites (todos em inglês) abaixo:

http://hadoop.apache.org/

Site oficial do Hadoop.

http://www.cloudera.com/

Tem muita informação sobre o Hadoop, destaque para os vídeos explicando sobre ele e a VM (Virtual Machine) que é disponibilizada gratuitamente com o Hadoop já instalado e configurado no Ubuntu.

http://wiki.apache.org/hadoop/

Wiki do Hadoop.

http://www.ibm.com/developerworks/linux/library/l-hadoop/index.html

Introdução do Hadoop feita pelo Ken Mann e pelo Author photo - Ken MannKen Mann is an embedded software developer in the Denver metro area. He has over 20 years experience in software development ranging from simulation and numerical analysis in Fortran 77 to embedded software for wired and wireless telecommunication applications.M. Tim Jones.

Palestra: Arquitetura para aplicações Java de médio porte – Falando em Java 2009

maio 25, 2009

Arquitetura para aplicações Java de médio porte

Palestra apresentada por Guilherme Moreira e Sergio Lopes (Caelum)

A palestra teve como foco o crescimento de sites ou aplicações Web, que ocorrendo de forma desordenada e sem planejamento tendem a gerar downtime, timeouts de resposta, inconsistência de dados, etc. Com isso perde-se dinheiro; as vezes muito dinheiro. Tendo como base esses tipos de aplicações os palestrantes abordaram problemas passíves de ocorrer, análise e as possíveis soluções a serem tomadas.

Problema 1: SOAP e gargalo de Rede

  • JSON x XML x WSDL (podem gerar problemas de tamanho de arquivo e compactação).

Solução: Uso do Fast Infoset (FI), que compacta XML (em até 30%) e tem performance.

Problema 2: Hibernate não otimizado

  • Banco de Dados é o gargalo (famosa primeira conclusão).

Solução:

  • Conhecer o cache de primeiro nível e evitar de carregar muitos objetos na memória (risco dejava.lang.OutOfMemoryError: Java heap space”);
  • Aprender a usar “stateless session“.
  • Cuidado com o “n+1 selects“;
  • Aprenda a usar as configurações certas do Hibernate (“@BatchSize“, por exemplo).

Problema 3: BD sobrecarregado

Solução:

  • Abrir conexões somente quando for necessário;
  • Use pool para reaproveitar conexões entre requests;
  • Só inicie transações quando for necessário;
  • Evite o uso do BD o tempo todo;
  • Use cache!

Problema 4: indisponibilidade

Solução:

  • Uso de cluster. Vantagens: escalabilidade e disponibilidade. Desvantagens: performance e não-simplicidade;
  • Uso de load balance. Vantagens e Desvantagens idênticas ao caso do cluster;
  • Gerenciar estados do cluster: Sticky Sessions (caiu a sessão, acabou), replicação (manda os dados para outra máquina) ou stateless (s/ estado nenhum. “Pra que estado?…rs”).

Após as apresentações dos “problemas-análise-solução” ambos palestrantes colocaram a prova e ao vivo uma demo de máquinas em cluster e load balance usando JBoss. Resultado : FAIL! Isso provou que mesmo tendo experiência no assunto, preparando anteriormente a demo, usando bons micros e outros poréns, é certo que algo pode ocorrer e que outros fatores podem influenciar.

Outras idéias para análise de arquiteturas:

Para finalizar eles deixaram uma frase de Martin Fowler para pensar: “Primeira Lei do Design de distribuição de objetos: Não distribua seus objetos” (Nem sempre o gargalo é a rede…).

É importante ressaltar novamente que na palestra houve a apresentação de códigos conforme os exemplos foram passados. Isso facilitou e muito o entendimento do público (tirando a falha na apresentação do cluster).