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
Postar um comentário