O que é o Apache Hive e o HiveQL no Azure HDInsight?
Apache Hive é um sistema de armazém de dados para Apache Hadoop. O Hive permite a sumarização, consulta e análise de dados. As consultas do Hive são escritas no HiveQL, que é uma linguagem de consulta semelhante ao SQL.
O Hive permite projetar a estrutura em dados em grande parte não estruturados. Depois de definir a estrutura, você pode usar o HiveQL para consultar os dados sem conhecimento de Java ou MapReduce.
O HDInsight fornece vários tipos de cluster, que são ajustados para cargas de trabalho específicas. Os seguintes tipos de cluster são usados com mais frequência para consultas do Hive:
Tipo de cluster | Description |
---|---|
Interactive Query | Um cluster Hadoop que fornece funcionalidade de Processamento Analítico de Baixa Latência (LLAP) para melhorar os tempos de resposta para consultas interativas. Para obter mais informações, consulte o documento Iniciar com consulta interativa no HDInsight . |
Hadoop | Um cluster Hadoop ajustado para cargas de trabalho de processamento em lote. Para obter mais informações, consulte o documento Iniciar com o Apache Hadoop no HDInsight . |
Spark | O Apache Spark tem funcionalidade integrada para trabalhar com o Hive. Para obter mais informações, consulte o documento Iniciar com o Apache Spark no HDInsight . |
HBase | O HiveQL pode ser usado para consultar dados armazenados no Apache HBase. Para obter mais informações, consulte o documento Iniciar com o Apache HBase no HDInsight . |
Como usar o Hive
Use a tabela a seguir para descobrir as diferentes maneiras de usar o Hive com o HDInsight:
Use este método se quiser... | ...consultas interativas | ... processamento em lote | ... a partir deste sistema operativo cliente |
---|---|---|---|
Ferramentas do HDInsight para Visual Studio Code | ✔ | ✔ | Linux, Unix, macOS X ou Windows |
Ferramentas do HDInsight para Visual Studio | ✔ | ✔ | Windows |
Vista do Hive | ✔ | ✔ | Qualquer (baseado no navegador) |
Cliente Beeline | ✔ | ✔ | Linux, Unix, macOS X ou Windows |
API REST | ✔ | Linux, Unix, macOS X ou Windows | |
Windows PowerShell | ✔ | Windows |
Referência da linguagem HiveQL
A referência da linguagem HiveQL está disponível no manual de idiomas.
Colmeia e estrutura de dados
O Hive entende como trabalhar com dados estruturados e semiestruturados. Por exemplo, arquivos de texto onde os campos são delimitados por caracteres específicos. A instrução HiveQL a seguir cria uma tabela sobre dados delimitados por espaço:
CREATE EXTERNAL TABLE log4jLogs (
t1 string,
t2 string,
t3 string,
t4 string,
t5 string,
t6 string,
t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';
O Hive também suporta serializadores/desserializadores personalizados (SerDe) para dados complexos ou irregularmente estruturados. Para obter mais informações, consulte o documento Como usar um SerDe JSON personalizado com HDInsight .
Para obter mais informações sobre formatos de arquivo suportados pelo Hive, consulte o Manual de idiomas (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)
Tabelas internas do Hive vs tabelas externas
Há dois tipos de tabelas que você pode criar com o Hive:
Interno: os dados são armazenados no armazém de dados do Hive. O data warehouse está localizado no
/hive/warehouse/
armazenamento padrão para o cluster.Use tabelas internas quando uma das seguintes condições se aplicar:
- Os dados são temporários.
- Você deseja que o Hive gerencie o ciclo de vida da tabela e dos dados.
Externo: os dados são armazenados fora do armazém de dados. Os dados podem ser armazenados em qualquer armazenamento acessível pelo cluster.
Use tabelas externas quando uma das seguintes condições se aplicar:
- Os dados também são usados fora do Hive. Por exemplo, os arquivos de dados são atualizados por outro processo (que não bloqueia os arquivos).
- Os dados precisam permanecer no local subjacente, mesmo depois de soltar a tabela.
- Você precisa de um local personalizado, como uma conta de armazenamento não padrão.
- Um programa diferente do hive gerencia o formato de dados, a localização e assim por diante.
Para obter mais informações, consulte a postagem do blog Introdução de tabelas internas e externas do Hive.
Funções definidas pelo usuário (UDF)
O Hive também pode ser estendido por meio de funções definidas pelo usuário (UDF). Um UDF permite implementar funcionalidades ou lógicas que não são facilmente modeladas no HiveQL. Para obter um exemplo de uso de UDFs com o Hive, consulte os seguintes documentos:
Usar uma função Java definida pelo usuário com o Apache Hive
Use uma função definida pelo usuário Python com o Apache Hive
Use uma função definida pelo usuário em C# com o Apache Hive
Como adicionar uma função personalizada definida pelo usuário do Apache Hive ao HDInsight
Dados de exemplo
O Hive no HDInsight vem pré-carregado com uma tabela interna chamada hivesampletable
. O HDInsight também fornece exemplos de conjuntos de dados que podem ser usados com o Hive. Esses conjuntos de dados são armazenados nos /example/data
diretórios e /HdiSamples
. Esses diretórios existem no armazenamento padrão do cluster.
Exemplo de consulta do Hive
As seguintes instruções HiveQL projetam colunas no /example/data/sample.log
arquivo:
DROP TABLE log4jLogs;
CREATE EXTERNAL TABLE log4jLogs (
t1 string,
t2 string,
t3 string,
t4 string,
t5 string,
t6 string,
t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';
SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
GROUP BY t4;
No exemplo anterior, as instruções HiveQL executam as seguintes ações:
Declaração | Description |
---|---|
DROP TABLE | Se a tabela já existir, exclua-a. |
CRIAR TABELA EXTERNA | Cria uma nova tabela externa no Hive. As tabelas externas armazenam apenas a definição de tabela no Hive. Os dados são deixados no local original e no formato original. |
FORMATO DA LINHA | Informa ao Hive como os dados são formatados. Nesse caso, os campos em cada log são separados por um espaço. |
ARMAZENADO COMO LOCAL DO ARQUIVO DE TEXTO | Informa ao Hive onde os dados estão armazenados (o example/data diretório) e que eles são armazenados como texto. Os dados podem estar em um arquivo ou espalhados por vários arquivos dentro do diretório. |
SELECIONAR | Seleciona uma contagem de todas as linhas em que a coluna t4 contém o valor [ERROR]. Esta instrução retorna um valor de 3 porque há três linhas que contêm esse valor. |
INPUT__FILE__NAME GOSTO DE '%.log' | O Hive tenta aplicar o esquema a todos os arquivos no diretório. Nesse caso, o diretório contém arquivos que não correspondem ao esquema. Para evitar dados de lixo nos resultados, esta instrução diz ao Hive que só devemos retornar dados de arquivos que terminam em .log. |
Nota
As tabelas externas devem ser usadas quando você espera que os dados subjacentes sejam atualizados por uma fonte externa. Por exemplo, um processo automatizado de carregamento de dados ou uma operação MapReduce.
Soltar uma tabela externa não exclui os dados, apenas exclui a definição da tabela.
Para criar uma tabela interna em vez de externa, use o seguinte HiveQL:
CREATE TABLE IF NOT EXISTS errorLogs (
t1 string,
t2 string,
t3 string,
t4 string,
t5 string,
t6 string,
t7 string)
STORED AS ORC;
INSERT OVERWRITE TABLE errorLogs
SELECT t1, t2, t3, t4, t5, t6, t7
FROM log4jLogs WHERE t4 = '[ERROR]';
Essas instruções executam as seguintes ações:
Declaração | Description |
---|---|
CRIAR TABELA SE NÃO EXISTIR | Se a tabela não existir, crie-a. Como a palavra-chave EXTERNAL não é usada, essa instrução cria uma tabela interna. A tabela é armazenada no armazém de dados do Hive e é gerida completamente pelo Hive. |
ARMAZENADO COMO ORC | Armazena os dados no formato Optimized Row Columnar (ORC). O ORC é um formato altamente otimizado e eficiente para armazenar dados do Hive. |
INSERIR SUBSTITUIR ... SELECIONAR | Seleciona linhas da log4jLogs tabela que contém [ERROR] e, em seguida, insere os dados na tabela errorLogs . |
Nota
Ao contrário das tabelas externas, descartar uma tabela interna também exclui os dados subjacentes.
Melhorar o desempenho de consultas do Hive
Apache Tez
O Apache Tez é uma estrutura que permite que aplicativos com uso intensivo de dados, como o Hive, sejam executados de forma muito mais eficiente em escala. Tez é ativado por padrão. Os documentos de design do Apache Hive on Tez contêm detalhes sobre as opções de implementação e configurações de ajuste.
Processamento analítico de baixa latência (LLAP)
LLAP (às vezes conhecido como Live Long e Process) é um novo recurso no Hive 2.0 que permite o cache de consultas na memória.
O HDInsight fornece LLAP no tipo de cluster Consulta Interativa. Para obter mais informações, consulte o documento Iniciar com consulta interativa.
Agendar consultas do Hive
Há vários serviços que podem ser usados para executar consultas do Hive como parte de um fluxo de trabalho agendado ou sob demanda.
Azure Data Factory
O Azure Data Factory permite que você use o HDInsight como parte de um pipeline do Data Factory. Para obter mais informações sobre como usar o Hive de um pipeline, consulte o documento Transformar dados usando o Hive no Azure Data Factory .
Trabalhos do Hive e SQL Server Integration Services
Você pode usar o SQL Server Integration Services (SSIS) para executar um trabalho do Hive. O Azure Feature Pack para SSIS fornece os seguintes componentes que funcionam com trabalhos do Hive no HDInsight.
Para obter mais informações, consulte a documentação do Azure Feature Pack .
Apache Oozie
O Apache Oozie é um sistema de fluxo de trabalho e coordenação que gerencia trabalhos do Hadoop. Para obter mais informações sobre como usar o Oozie com o Hive, consulte Usar o Apache Oozie para definir e executar um documento de fluxo de trabalho .
Nota
O Manipulador de Armazenamento Phoenix para Hive não é suportado no HDInsight
Próximos passos
Agora que você aprendeu o que é o Hive e como usá-lo com o Hadoop no HDInsight, use os links a seguir para explorar outras maneiras de trabalhar com o Azure HDInsight.