Big Data - O que é o hadoop, map reduce, hdfs e hive

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.

description

Texto sobre Big Data extraído do blog bigdatabrazil.blogspot.com com informações básicas sobre hadoop, mapreduce, hdfs e hive. Contém indicações de livros e links que detalham o assunto.

Transcript of Big Data - O que é o hadoop, map reduce, hdfs e hive

Page 1: Big Data - O que é o hadoop, map reduce, hdfs e hive

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.

Page 2: Big Data - O que é o hadoop, map reduce, hdfs e hive

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.

Page 3: Big Data - O que é o hadoop, map reduce, hdfs e hive

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.

Page 4: Big Data - O que é o hadoop, map reduce, hdfs e hive

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

Page 5: Big Data - O que é o hadoop, map reduce, hdfs e hive

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 (

Page 6: Big Data - O que é o hadoop, map reduce, hdfs e hive

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

Page 7: Big Data - O que é o hadoop, map reduce, hdfs e hive

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.

Page 8: Big Data - O que é o hadoop, map reduce, hdfs e hive

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.

Page 9: Big Data - O que é o hadoop, map reduce, hdfs e hive

Recomendo o livro abaixo sobre o Hive.

Bigdatabrazil.blogspot.com