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.


 Continuamos na próxima semana, com outro assunto interessante.

Comentários

Postagens mais visitadas deste blog

O que é o HDFS ?

O que é o HBASE ?