Вы находитесь на странице: 1из 9

Big Data – Hadoop, MapReduce, HDFS e Hive

Bigdatabrazil.blogspot.com
O que é o Hadoop ?

O Hadoop é um projeto de software livre desenvolvido pela Apache Software


Foundation (http://apache.org/ ), que é uma plataforma de computação
distribuida, com alta escalabilidade, grande confiabilidade e tolerância a falhas.

A biblioteca de software Hadoop (http://hadoop.apache.org/) é um framework


que permite o processamento distribuído de grandes conjuntos de dados
através de clusters de computadores usando modelos de programação
simples. Ele é projetado para garantir larga escalabilidade partindo de um único
servidor até um cluster com milhares de máquinas, cada uma oferecendo
capacidade de computação e armazenamento local. Em vez de confiar em
hardware para proporcionar maior disponibilidade, a própria biblioteca foi
concebida para detectar e tratar falhas na camada de aplicação, de modo a
fornecer um serviço com alta disponibilidade baseado em um grid de
computadores.

Além da biblioteca base escrita em Java, chamada Hadoop Common , temos o


HDFS (Hadoop Distributed File System), o YARN e o MapReduce que é um
sistema voltado para processamento de dados com alta escalabilidade e
paralelismo. Podemos criar programas em Java usando a biblioteca
MapReduce (org.apache.hadoop.mapreduce.*) para processar grandes
quantidades de dados em poucos segundos. Realizar uma operação de sort
(ordenação) usando o Hadoop já leva menos de 60 segundos. Além de
executar programas em Java, podem ser executadas funções em Ruby, Python
e Pipes (C++).

Recomendo a leitura do Livro Hadoop The Definitive Guide de Tom White.


Utilizando o MapReduce

O MapReduce é um conjunto de bibliotecas que permite realizar


processamento em paralelo, de grandes quantidades de dados, usando todo o
hardware disponível no cluster Hadoop, dividindo este processamento em 2
etapas, uma chamada Map, que é o mapeamento e validação dos dados e a
outra chamada Reduce, que tem como entrada o resultado da fase Map
anterior, gerando o resultado final. Utiliza-se normalmente processamento de
pares de valores chaves.

Como exemplo de uso na indústria de óleo e gás, podemos obter milhares de


arquivos de logs em formato texto, com informações de pressão e temperatura
oriundas de um poço, mapear e validar os dados destes arquivos e em um
segundo passo obter a maior temperatura e pressão do conjunto analisado.
Esta tarefa pode ser feita usando programas em Java. Neste caso teríamos um
programa para realizar o mapeamento, um programa para realizar a redução e
um programa controlador que executa os outros dois. A API Java MapReduce
se encarrega de resolver todas as complexidades do processamento paralelo,
deixando a cargo do programador apenas a lógica de realizar a validação e
iteração nos conjuntos de dados.

Para realizar testes com a biblioteca MapReduce, devemos obter uma versão
do Hadoop, realizando o download do software a partir do site da Apache.
Caso deseje executar em um computador com sistema Windows, será
necessário instalar também o Cygwin. É necessário também instalar o JDK ,
configurar as variáveis Java Home, Hadoop Home, Classpath e Hadoop
Classpath. Conhecimentos de configuração de ambiente Java e Classpath são
importantes nesta fase de configuração do ambiente.
MapReduce e Amazon Elastic MapReduce

Antes de falar sobre o HDFS , gostaria de abordar um pouco mais sobre o


MapReduce e também sobre o Amazon Elastic MapReduce, que é a oferta da
Amazon que possibilita executar jobs MapReduce em um ambiente baseado
em Cloud Computing.

- MapReduce

Um job do MapReduce é uma unidade de trabalho a ser executada, que


consiste de dados de input, programas MapReduce ( para realizar as
operações de mapeamento e redução ) e as informações de configurações do
ambiente. O Hadoop divide o "job input" , que são os dados a serem
trabalhados, em "splits", que são alocados em diversos nós, que podem ser
locais ou remotos. Para cada split localizado em um bloco HDFS ( Hadoop
Distributed File System ) existe uma tarefa MapReduce associada, que pode
estar ou não no mesmo nó.

As figuras abaixo, extraídas do livro Hadoop The Definitive Guide de Tom


White, mostram como pode ser realizado o encadeamento de tarefas Map e
Reduce e a distribuição dos splits nos nós.
- Amazon Elastic MapReduce

O Amazon Elastic MapReduce (EMR) realiza uma implementação do


framework MapReduce nas instâncias do Amazon EC2, subdividindo os dados
de um fluxo de trabalho em partes menores para que possam ser processados
( Map ) paralelamente e, por fim, recombinando os dados processados na
solução final ( Reduce ). O Amazon S3 atua como fonte dos dados que estão
sendo analisados e como destino de saída dos resultados finais. Para realizar
o processamento utiliza uma arquitetura baseada em Master - Workers ou
Slaves.
Um cluster Hadoop rodando no Amazon EMR pode utilizar instãncias virtuais
de servidores Linux como mestres e escravos, pode utilizar o Amazon S3
como bulk storage dos dados de input e output , e o Amazon CloudWatch para
monitorar a performance do cluster e lançar alertas.

O que é o HDFS ?

O HDFS (Hadoop Distributed File System) é um sistema de arquivos


distribuído, projetado para armazenar arquivos muito grandes, com padrão de
acesso aos dados streaming , utilizando clusters de servidores facilmente
encontrados no mercado e de baixo ou médio custo. Não deve ser utilizado
para aplicações que precisem de acesso rápido a um determinado registro e
sim para aplicações nas quais é necessário ler uma quantidade muito grande
de dados. Outra questão que deve ser observada é que não deve ser utilizado
para ler muitos arquivos pequenos, tendo em vista o overhead de memória
envolvido.

O HDFS possui o conceito de blocos, tal como no Unix, mas seus blocos
normalmente têm tamanho de 64MB. Um arquivo muito grande pode ter blocos
armazenados em mais de um servidor. Com este conceito de blocos de
tamanho fixo fica mais fácil calcular as necessidades de armazenamento.

O HDFS tem 2 tipos de Nós : Master (ou Namenode) e Worker (ou Datanode).
O Master armazena informações da distribuição de arquivos e metadados. Já o
Worker armazena os dados propriamente ditos. Logo o Master precisa sempre
estar disponível. Para garantir a disponibilidade podemos ter um backup (
similar ao Cold Failover ) ou termos um Master Secundário em um outro
servidor. Nesta segunda opção, em caso de falha do primário, o secundário
pode assumir o controle muito rapidamente.

Tal como um sistema Unix, é possível utilizar o HDFS via linha de comando.
Para saber a lista de comandos digite hadoop fs -help. É possível criar
diretórios (mkdir), listar diretório (ls) , copiar arquivos (copyFromLocal,
copyToLocal), permissionamento de arquivos e diretórios, etc.

A classe java abstrata org.apache.hadoop.fs.Filesystem pode ser


implementada de forma concreta usando o HDFS, FTP, S3 (Amazon Native),
S3 (block-based), etc. Utilizando programas simples em java também é
possível listar arquivos, diretórios, copiar arquivos, ler dados, gravar dados, etc.

A figura abaixo, extraída do livro Hadoop The Definitive Guide de Tom White,
mostra como é realizada a leitura de um arquivo no HDFS.

Como vimos no post anterior do dia 09 de Julho é possível, ao invés de


armazenar os dados em um HDFS na própria empresa ou residência,
armazenar na nuvem em um provedor que possa ter a melhor relação custo
benefício e maior disponibilidade possível, tal como a Amazon Web Services
(aws.amazon.com).

A AWS oferece um conjunto completo de serviços de aplicativos e


infraestrutura que permitem que você execute praticamente tudo na nuvem:
desde aplicativos empresariais e projetos de Big Data a jogos sociais e
aplicativos móveis.

Grandes empresas como SAP, Adobe, Netflix e Nasdaq já usam os serviços


de computação na nuvem da Amazon.

A Netflix mantém um blog de tecnologia ( techblog.netflix.com ), no qual explica


com detalhes como utiliza o Hadoop, tendo como meio de armazenamento o
Amazon Simple Storage Service.

http://techblog.netflix.com/2013/01/hadoop-platform-as-service-in-cloud.html
Hive, o que é ?

Após uma semana voltada para a Jornada Mundial da Juventude no Rio de


Janeiro, que foi bastante recompensadora, voltamos ao nosso dia a dia no
mundo da tecnologia e falamos sobre o Hive.

O Hive é um framework para soluções de Data Warehousing, que executa no


ambiente do Hadoop, construído inicialmente pelo time de desenvolvimento do
Facebook em 2007. Ele nasceu a partir da necessidade de gerenciar, analisar
e aprender sobre o comportamento dos usuários a partir dos imensos volumes
de dados gerados a cada dia no Facebook. A escolha pelo Hadoop foi
incentivada pelo baixo custo, escalabilidade e evitar a dependência sobre
custos de licenças e manutenção anual que são comuns nos bancos de dados
do mercado. Outro ponto também que levou ao desenvolvimento do Hive foi o
baixo desempenho das soluções de mercado para realizar operações de Full
Scan em grandes volumes de dados. O Hive foi criado também visando
aproveitar os "skills" de uso do SQL dos analistas e desenvolvedores do
Facebook, que não eram na época tão proficientes em Java para usar o
MapReduce. Atualmente é um projeto da Apache ( http://hive.apache.org).

Como a finalidade principal do Hive é analisar dados, o mesmo deve ser capaz
de se integrar com soluções de Business Intelligence existentes no mercado.
Hive utiliza uma linguagem chamada HiveQL (Hive Query Language) , que
transforma as sentenças SQL em Jobs MapReduce executados no cluster
Hadoop.

Os comados existentes no SQL tais como create table, select, describe, drop
table, etc existem no Hive, mas tem diferenças tal como a clausula ROW
FORMAT do create table. Para popular tabelas pode ser utilizado o comando
LOAD DATA , que obtém a entrada de dados e carrega no warehouse do Hive.

Podem ser utilizados agregadores como Max, SUM, Count, etc que necessitam
da clausula GROUP BY, tal como no SQL.

Para acessar os dados podem ser utilizadas a própria interface de comandos,


drivers JDBC, drivers ODBC e o Hive Thrift Client (para C++, Python, Ruby,
etc). Possibilita acessar dados que estejam no sistema de arquivos HDFS, em
outros sistemas de arquivos (ex. Amazon S3) ou no HBASE. Abaixo está uma
figura que descreve a arquitetura do Hive.

Para suportar schemas e partitioning o Hive deve manter os seus metadados


em um banco relacional, podendo ser utilizado o Derby ou o MySQL. Ao inserir
dados no Hive, caso haja violação nos tipos de dados do schema, o mesmo
será gravado Null, não havendo interrupção da entrada de dados. O
particionamento de tabelas (partitioning) permite aumentar a performance das
queries executadas. As partições são armazenadas em diretórios diferentes,
buscando otimizar o acesso na leitura do disco. Assim como os bancos
relacionais suporta Joins e Outer Joins.

O Hive não foi desenhado para executar queries em real time, com baixa
latência. Foi desenhado para melhor performance analisando grandes
quantidades de dados que se encontram em clusters. Normalmente são estes
tipos de queries que temos em painéis analíticos de aplicações de Business
Intelligence, que usualmente utilizam operadores do tipo Sum, Count, etc, que
em ambientes usuais de data warehouse podem consumir horas para que
estes tipos de query retornem resultado. Já passei por este tipo de situação na
qual ferramentas de BI ao acessar uma quantidade de dados muito grandes em
bases tradicionais simplesmente tem uma performance tão pobre que o seu
uso pelos clientes finais e dashboards (painéis analíticos) é inviabilizado.
Recomendo o livro abaixo sobre o Hive.

Bigdatabrazil.blogspot.com

Вам также может понравиться