# Apache Hive

Apache Hive é um software de Data Warehouse desenvolvido em cima do Apache Hadoop para consulta e análise de dados. O Hive oferece uma interface semelhante ao SQL para consulta de dados em diferentes bancos de dados e sistemas de arquivos integrados ao Hadoop. Comandos tradicionais de SQL são implementados na API Java para serem executados em dados distribuídos. O Hive fornece as abstrações necessárias para integrar comandos do tipo SQL(em uma linguagem chamada HiveQL). Como a maioria das aplicações de Data Warehousing trabalham com consultas baseadas em linguagens SQL, o Apache Hive facilita a portabilidade dessas aplicações para o Hadoop. Embora tenha sido inicialmente desenvolvido pelo Facebook, atualmente é também usado e desenvolvido por outras organizações, como a Netflix e a Amazon.

## Comparação com Bancos de Dados tradicionais

Embora A linguagem HiveQL seja um dialeto de SQL, existem muitas diferenças de estrutura e funcionamento entre o Hive e os bancos de dados relacionais. As diferenças se devem, em grande parte, ao fato de que o Hive foi desenvolvido para uso com o ecossistema Hadoop, e portanto precisa obedecer as restrições do Hadoop e do MapReduce.
Em bancos de dados tradicionais, um esquema de banco de dados é utilizado. Em tais bancos, o esquema é aplicado quando os dados são carregados, assegurando que os dados inseridos seguem os formatos especificados pelas definições de tabela. O Apache Hive, por outro lado, não verifica a compatibilidade dos dados com o esquema no momento do registro. Ao invés disso, são feitas checagens quando os dados são lidos. Cada uma dessas abordagens tem suas vantagens e desvantagens. Conferir os dados com o esquema no momento do registro exige mais processamento, fazendo com que os bancos relacionais demorem mais tempo para o carregamento de dados. No entanto, checagens de qualidade executadas no momento do registro asseguram que os dados não estão corrompidos. A detecção precoce de dados corruptos permite um manejo de exceções mais eficiente, e consultas subsequentes serão mais rápidas. O Hive, por outro lado, permite o registro dinâmico de dados, assegurando um carregamento muito mais rápido, mas com a desvantagem de consultas mais lentas. Hive leva vantagem se o esquema não estiver disponível no momento do registro, sendo gerado posteriormente.
Transações são operações muito importantes em bancos de dados. Como em qualquer sistema gerenciador de banco de dados (SGBD), O Hive permite todas as quatro operações básicas de transação (ACID): Atomicidade, Consistência, Isolamento e and Durabilidade. As transações foram introduzida no Hive na versão 0.13, mas eram limitadas a nível de partição. Nas versões mais recentes do Hive 0.14 essas funções foram incorporadas de forma completa, mantendo as propriedades ACID. As versões subsequentes fornecem transações de linha como INSERT, DELETE and UPDATE. Habilitar transações de INSERT, UPDATE, DELETE requer a configuração adequada de propriedades como hive.support.concurrency, hive.enforce.bucketing, and hive.exec.dynamic.partition.mode.

## Segurança

A versão 0.7.0 adicionou integração com a segurança do Hadoop. Hadoop passou a usar o protocolo Kerberos para maior segurança de autorizações. Kerberos permite autenticação mútua entre cliente e servidor. Nesse sistema, o pedido de autorização é enviado junto à requisição em si. Versões anteriores do Hadoop tinham alguns problemas de segurança, como por exemplo a possibilidade de falsificar nomes de usuário configurando a propriedade hadoop.job.ugi e também o fato das operações MapReduce serem executadas pelo mesmo nome de usuário: hadoop ou mapred. A integração do Hive 0.7.0 com a segurança Hadoop, esses problemas foram resolvidos. Permissões para novos arquivos criados são reguladas pelo HDFS. O model de autorização HDFS tem três entidades(user,group e other) com três possíveis permissões(read, write e execute).