Apache Hive
O que é o Apache Hive?
O Apache Hive é um software de data warehouse de código aberto projetado para ler, gravar e gerenciar grandes conjuntos de dados extraídos do Apache Hadoop Distributed File System (HDFS), um aspecto de um ecossistema Hadoop maior.
Com sua extensa documentação e atualizações contínuas, o Apache Hive continua inovando no processamento de dados de forma acessível.
A história do Apache Hive
Apache Hive é um projeto de código aberto concebido pelos codesenvolvedores Joydeep Sen Sarma e Ashish Thusoo durante seu tempo no Facebook. O Hive começou como um subprojeto do Apache Hadoop, mas, agora, se tornou um projeto autônomo de nível superior. Com as crescentes limitações de jobs Hadoop e MapReduce e o aumento do tamanho dos dados de dezenas de GB por dia em 2006 para 1 TB por dia e nos próximos anos para 15 TB por dia, os engenheiros do Facebook não conseguiam executar jobs complexos com facilidade, dando lugar à criação do Hive.
O Apache Hive foi desenvolvido para atingir dois objetivos. O primeiro é uma linguagem declarativa baseada em SQL, que também permite que os engenheiros adicionem seus próprios scripts e programas quando o SQL não é suficiente. Isso permite que a maioria dos engenheiros com habilidades em SQL use o Hive com o mínimo de interrupção e retreinamento em comparação com outros produtos.
O segundo é centralizar todos os conjuntos de dados dentro da organização em um armazenamento de metadados baseado em Hadoop. O Apache Hive começou como um desenvolvimento interno no Facebook, mas, desde então, tem sido usado e desenvolvido por outras empresas, como a Netflix. A Amazon mantém uma bifurcação do Apache Hive, que está incluída no Amazon Elastic MapReduce na Amazon Web Services.
Alguns recursos do Hive
O Apache Hive oferece suporte à análise de conjunto de dados em grande escala armazenados em sistemas de arquivos compatíveis com HDFS e Hadoop, como Amazon S3, Azure Blob Storage, Azure Data Lake Storage, Google Cloud Storage e Alluxio.
Ele fornece uma linguagem de query semelhante a SQL, de esquema na leitura, chamada HiveQL, que transforma queries de forma transparente em jobs Apache Spark, MapReduce e Apache Tez. Outros recursos do Hive incluem:
- As funções de dados do Hive oferecem suporte ao processamento e à consulta de grandes conjuntos de dados. Algumas das funcionalidades fornecidas por essas funções incluem manipulação de string, manipulação de data, conversão de tipo, operadores condicionais, funções matemáticas e muitas outras.
- Armazenamento de metadados em um sistema de gerenciamento de banco de dados relacional (RDBMS).
- Vários tipos de armazenamento, como Parquet, texto simples, RCFile, HBase, ORC (Optimized Row Columnar) e outros.
- Manipulação de dados compactados armazenados no ecossistema Hadoop usando algoritmos.
- Funções definidas pelo usuário (UDFs) integradas para trabalhar com datas, strings e outras ferramentas de mineração de dados. O Hive é compatível com a extensão do conjunto UDF para lidar com casos de uso para os quais nenhuma função integrada é fornecida.
- HiveQL, uma linguagem de queries semelhante a SQL, é convertida internamente em jobs MapReduce, Tez ou Spark.
Arquitetura Apache Hive e componentes principais do Apache Hive
Os principais componentes da arquitetura Apache Hive são Hive Server 2, Hive Query Language (HQL), Apache Hive Metastore externo e Hive Beeline Shell.
Hive Server 2
O Hive Server 2 aceita solicitações de usuários e aplicativos e cria planos de execução. Em seguida, ele gera automaticamente um job YARN para processar queries SQL. O servidor também é compatível com o otimizador Hive e ao compilador Hive para extração e processamento de dados eficientes.
Hive Query Language
O Apache Hive permite que você implemente um código que lembra o SQL, possibilitando consultas usando comandos de HQL integrados, em vez de empregar grandes quantidades de código JavaScript para classificar dados não estruturados. Esses comandos podem ser usados para induzir grandes conjuntos de dados, refinar resultados e compartilhar dados de maneira econômica e eficiente em termos de tempo.
Hive Metastore
O Metastore, repositório central da infraestrutura do Apache Hive, armazena todos os metadados do Hive. Metastores também permitem formatar metadados em partições e tabelas Hive e comparar dados em bancos de dados relacionais. Os metadados incluem nomes de tabelas, nomes de colunas, tipos de dados, informações de partição e localização de dados no HDFS.
Hive Beeline Shell
Como outros sistemas de gerenciamento de banco de dados (DBMS), o Hive possui sua própria interface de linha de comando integrada que permite aos usuários executar comandos HQL. O Hive Shell também executa os drivers Hive JDBC e ODBC para que você possa consultar a partir de aplicativos Open Database Connectivity ou Java Database Connectivity.
Como o software Apache Hive funciona?
O Hive Server 2 aceita solicitações de usuários e aplicativos antes de criar planos de execução. Em seguida, ele gera automaticamente um job YARN para processar queries SQL. O job YARN pode ser gerado como cargas de trabalho MapReduce, Tez ou Spark.
A tarefa é executada como um aplicativo distribuído no Hadoop, processando queries SQL e retornando os resultados ao usuário final ou aplicativo ou de volta ao HDFS.
O Hive Metastore usa um banco de dados relacional, como Postgres ou MySQL, para armazenar esses metadados, e o Hive Server 2 captura a estrutura da tabela como parte do planejamento da query. Em alguns casos, é possível consultar o metastore como parte do processamento subjacente do aplicativo.
As cargas de trabalho do Hive são executadas no YARN, o gerenciador de recursos do Hadoop, que fornece um ambiente de processamento no qual os jobs do Hadoop podem ser executados. Esse ambiente de processamento consiste em memória alocada e CPU de vários nós worker no cluster Hadoop.
O YARN aproveita as informações de metadados do HDFS e tenta implantar o processamento onde os dados desejados residem. MapReduce, Tez, Spark e Hive podem gerar automaticamente código de queries SQL como jobs MapReduce, Tez e Spark.
O Hive aproveitou recentemente o MapReduce, mas a maioria das implantações do Cloudera Hadoop tem o Hive configurado para usar MapReduce ou, às vezes, Spark. Além disso, as implantações do Hortonworks (HDP) geralmente têm o Tez configurado como o mecanismo de execução.
Quais são os cinco tipos de dados usados no Apache Hive?
A capacidade do Apache Hive de extrair e analisar rapidamente petabytes de dados por meio do processamento em batch o torna ideal para processamento de dados, bem como para queries ad hoc.
Os tipos de dados do Apache Hive consistem em cinco categorias: números, data/hora, strings, dados compostos e dados diversos.
Tipos de dados numéricos
Como o nome sugere, esse tipo de dados é baseado em dados inteiros. Exemplos de tipos de dados são “TINYINT”, “SMALLINT”, “INT” e “BIGINT”.
Tipos de dados de data/hora
Estes tipos de dados permitem que os usuários insiram uma hora e uma data, com “TIMESTAMP”, “DATE” e “INTERVAL” sendo entradas aceitas.
Tipos de dados de string
Esses tipos de dados são muito diretos e permitem que texto escrito, ou “strings”, seja implementado como dados para processamento. Os tipos de dados strings incluem “STRING”, “VARCHAR” e “CHAR”.
Tipos de dados complexos
Um dos tipos de dados mais avançados, os tipos de dados complexos registram dados mais elaborados e consistem em dados como “STRUCT”, “MAP”, “ARRAY” e “UNION”.
Tipos de dados diversos
Os tipos de dados que não se enquadram em nenhuma das outras quatro categorias são chamados de tipos de dados diversos e podem receber entradas como “BOOLEAN” ou “BINARY”.
Como o Map Join funciona no Hive Apache
No Apache Hive, o Map Join é um recurso empregado para melhorar a velocidade e a eficiência da query, unindo dados de duas tabelas e evitando os estágios MapReduce do processo.
O que é um sistema de gerenciamento de banco de dados relacional (RDBMS) e como o Apache Hive tira proveito dele?
Um sistema de gerenciamento de banco de dados relacional (RDBMS) é um modelo de banco de dados que funciona armazenando metadados em uma estrutura de tabela baseada em linha ou coluna, permitindo que diferentes conjuntos de dados sejam conectados e comparados.
Ao usar um RDBMS, o Apache Hive pode armazenar e processar todos os dados de forma segura, confiável e precisa. Isso é obtido por meio de recursos integrados, como segurança baseada em função e comunicações criptografadas, garantindo que apenas as pessoas certas tenham acesso às informações extraídas.
Diferenças entre o Apache Hive e o RDBMS tradicional
O Apache Hive e o RDBMS têm algumas diferenças importantes:
- Enquanto o RDBMS funciona como leitura/gravação várias vezes, o Hive grava uma vez e lê várias vezes.
- O Hive segue a regra schema-on-read e não verifica, analisa ou valida dados, apenas copia e move arquivos. Os bancos de dados tradicionais, por outro lado, aplicam esquemas a tabelas de acordo com a regra schema-on-write.
- O Hive é construído no Hadoop e deve seguir as mesmas limitações do Hadoop e do MapReduce. Outros RDBMS não estão limitados a isso.
Apache Hive x Apache Spark
O Apache Spark é um framework de análise projetado para processar grandes quantidades de dados em diversos conjuntos de dados, fornecendo uma interface de usuário poderosa compatível com uma variedade de linguagens de R a Python.
O Hive fornece uma camada de abstração que representa dados como tabelas com linhas, colunas e tipos de dados para consultar e analisar usando uma interface SQL chamada HiveQL. O Apache Hive também é compatível com transações ACID com Hive LLAP. As transações garantem uma visão consistente dos dados em um ambiente onde vários usuários ou processos acessam dados simultaneamente e executam operações CRUD (criar, ler, atualizar, excluir).
O Delta Lake fornecido pela Databricks é semelhante ao Hive LLAP na medida em que garante transações ACID, mas oferece vários outros benefícios para ajudar no desempenho e na confiabilidade ao acessar dados. O Spark SQL é um módulo do Apache Spark para trabalhar com dados estruturados representados como tabelas com linhas, colunas e tipos de dados.
O Spark SQL é compatível com SQL 2003 e usa o Apache Spark como mecanismo distribuído para processamento de dados. Além da interface Spark SQL, é possível manipular dados usando Java, Scala, Python e R usando a API DataFrames. O Spark SQL é semelhante ao HiveQL.
Ambos usam a sintaxe ANSI SQL e a maioria das funções do Hive são executadas na Databricks. Essas funções do Hive incluem conversão e análise de data/hora, coleções, manipulação de strings, operações matemáticas e funções condicionais.
No entanto, existem algumas funções específicas do Hive que precisam ser convertidas em equivalentes do Spark SQL ou funções que não existem no Spark SQL na Databricks. Qualquer HiveQL usando a sintaxe ANSI SQL deve funcionar com o Spark SQL na Databricks.
Também inclui agregação ANSI SQL e funções analíticas. O Hive é otimizado para o formato de arquivo ORC e também aceita Parquet. A Databricks é otimizada para Parquet e Delta e também aceita ORC. Recomendamos usar Delta, que usa Parquet de código aberto como formato de arquivo.
Apache Hive x Presto
PrestoDB, comumente conhecido como Presto, é um projeto originalmente lançado no Facebook, um mecanismo de query SQL distribuído capaz de processar e analisar petabytes de dados em alta velocidade. A infraestrutura do Presto é compatível com a integração de bancos de dados relacionais e não relacionais, de MySQL e Teradata a MongoDB e Cassandra.