Utilizar o cliente Apache Beeline com o Apache Hive
Este artigo descreve como utilizar o cliente Apache Beeline da linha de comandos para criar e executar consultas do Apache Hive através de uma ligação SSH.
Fundo
O Beeline é um cliente do Hive incluído nos nós principais do cluster do HDInsight. Este artigo descreve como utilizar esta ferramenta através de exemplos com uma consulta do Hive e um ficheiro HiveQL.
Para ligar ao cliente Beeline instalado no cluster do HDInsight ou instalar o Beeline localmente, siga o nosso guia para se ligar ou instalar o Apache Beeline.
O Beeline utiliza o JDBC para ligar ao HiveServer2, um serviço alojado no cluster do HDInsight. Também pode utilizar o Beeline para aceder ao Hive no HDInsight remotamente através da Internet. Os exemplos seguintes fornecem as cadeias de ligação mais comuns utilizadas para ligar ao HDInsight a partir do Beeline.
Pré-requisitos para exemplos
Um cluster do Hadoop no Azure HDInsight. Se precisar de um cluster, siga o nosso guia para criar um cluster do HDInsight.
Repare no esquema de URI do armazenamento primário do cluster. Por exemplo,
wasb://
para o Armazenamento do Azure,abfs://
para Azure Data Lake Storage Gen2 ouadl://
para Azure Data Lake Storage Gen1. Se a transferência segura estiver ativada para o Armazenamento do Azure, o URI seráwasbs://
. Para obter mais informações, veja Transferência segura.Um cliente SSH. Para obter mais informações, veja Ligar ao HDInsight (Apache Hadoop) através de SSH. A maioria dos passos neste documento pressupõe que está a utilizar o Beeline de uma sessão SSH para o cluster. Também pode utilizar um cliente Beeline local, mas esses passos não estão abrangidos neste artigo.
Executar uma consulta do Hive
Este exemplo baseia-se na utilização do cliente Beeline a partir de uma ligação SSH.
Abra uma ligação SSH ao cluster com o código abaixo. Substitua
sshuser
pelo utilizador SSH do seu cluster eCLUSTERNAME
pelo nome do seu cluster. Quando lhe for pedido, introduza a palavra-passe da conta de utilizador SSH.ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Ligue-se ao HiveServer2 com o cliente Beeline a partir da sessão SSH aberta ao introduzir o seguinte comando:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Nota
Veja a parte "To HDInsight Enterprise Security Package (ESP) using Kerberos" part in Connect to HiveServer2 using Beeline or install Beeline locally to connect from your local if you are using an Enterprise Security Package (ESP) enabled cluster
Os comandos beeline começam com um
!
caráter, por exemplo!help
, apresenta ajuda. No entanto, o!
pode ser omitido para alguns comandos. Por exemplo,help
também funciona.!sql
Existe , que é utilizado para executar instruções do HiveQL. No entanto, o HiveQL é utilizado com tanta frequência que pode omitir o anterior!sql
. As duas instruções seguintes são equivalentes:!sql show tables; show tables;
Num novo cluster, apenas uma tabela está listada: hivesampletable.
Utilize o seguinte comando para apresentar o esquema do hivesampletable:
describe hivesampletable;
Este comando devolve as seguintes informações:
+-----------------------+------------+----------+--+ | col_name | data_type | comment | +-----------------------+------------+----------+--+ | clientid | string | | | querytime | string | | | market | string | | | deviceplatform | string | | | devicemake | string | | | devicemodel | string | | | state | string | | | country | string | | | querydwelltime | double | | | sessionid | bigint | | | sessionpagevieworder | bigint | | +-----------------------+------------+----------+--+
Estas informações descrevem as colunas na tabela.
Introduza as seguintes instruções para criar uma tabela com o nome log4jLogs com dados de exemplo fornecidos com o cluster do HDInsight: (Reveja conforme necessário com base no esquema URI.)
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 'wasbs:///example/data/'; SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
Estas instruções efetuam as seguintes ações:
Instrução Descrição DROP TABLE Se a tabela existir, esta será eliminada. CRIAR TABELA EXTERNA Cria uma tabela externa no Hive. As tabelas externas armazenam apenas a definição da tabela no Hive. Os dados são deixados na localização original. FORMATO DE LINHA Como os dados são formatados. Neste caso, os campos em cada registo são separados por um espaço. ARMAZENADO COMO LOCALIZAÇÃO DO FICHEIRO DE TEXTO Onde os dados são armazenados e em que formato de ficheiro. SELECIONAR Seleciona uma contagem de todas as linhas em que a coluna t4 contém o valor [ERRO]. Esta consulta devolve um valor de 3 , uma vez que existem três linhas que contêm este valor. INPUT__FILE__NAME LIKE '%.log' O Hive tenta aplicar o esquema a todos os ficheiros no diretório. Neste caso, o diretório contém ficheiros que não correspondem ao esquema. Para evitar dados de lixo nos resultados, esta instrução indica ao Hive que só deve devolver dados de ficheiros que terminem no .log. Nota
As tabelas externas devem ser utilizadas quando espera que os dados subjacentes sejam atualizados por uma origem externa. Por exemplo, um processo automatizado de carregamento de dados ou uma operação mapReduce.
Remover uma tabela externa não elimina os dados, apenas a definição da tabela.
O resultado deste comando é semelhante ao seguinte texto:
INFO : Tez session hasn't been created yet. Opening session INFO : INFO : Status: Running (Executing on YARN cluster with App id application_1443698635933_0001) INFO : Map 1: -/- Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0(+1)/1 Reducer 2: 0/1 INFO : Map 1: 0(+1)/1 Reducer 2: 0/1 INFO : Map 1: 1/1 Reducer 2: 0/1 INFO : Map 1: 1/1 Reducer 2: 0(+1)/1 INFO : Map 1: 1/1 Reducer 2: 1/1 +----------+--------+--+ | sev | count | +----------+--------+--+ | [ERROR] | 3 | +----------+--------+--+ 1 row selected (47.351 seconds)
Sair do Beeline:
!exit
Executar um ficheiro HiveQL
Este exemplo é uma continuação do exemplo anterior. Utilize os seguintes passos para criar um ficheiro e, em seguida, execute-o com o Beeline.
Utilize o seguinte comando para criar um ficheiro com o nome query.hql:
nano query.hql
Utilize o seguinte texto como o conteúdo do ficheiro. Esta consulta cria uma nova tabela "interna" com o nome errorLogs:
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]' AND INPUT__FILE__NAME LIKE '%.log';
Estas instruções efetuam as seguintes ações:
Instrução Descrição CRIAR TABELA SE NÃO EXISTIR Se a tabela ainda não existir, é criada. Uma vez que a palavra-chave EXTERNA não é utilizada, esta instrução cria uma tabela interna. As tabelas internas são armazenadas no armazém de dados do Hive e são geridas completamente pelo Hive. ARMAZENADO COMO ORC Armazena os dados no formato Colunas de Linha Otimizadas (ORC). O formato ORC é um formato altamente otimizado e eficiente para armazenar dados do Hive. INSERIR SUBSTITUIÇÃO... SELECIONAR Seleciona linhas da tabela log4jLogs que contêm [ERRO]e, em seguida, insere os dados na tabela errorLogs . Nota
Ao contrário das tabelas externas, remover uma tabela interna também elimina os dados subjacentes.
Para guardar o ficheiro, utilize Ctrl+X, introduza Y e, por fim, Introduza.
Utilize o seguinte para executar o ficheiro com o Beeline:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
Nota
O
-i
parâmetro inicia o Beeline e executa as instruções noquery.hql
ficheiro. Assim que a consulta estiver concluída, chega àjdbc:hive2://headnodehost:10001/>
linha de comandos. Também pode executar um ficheiro com o-f
parâmetro , que sai do Beeline após a conclusão da consulta.Para verificar se a tabela errorLogs foi criada, utilize a seguinte instrução para devolver todas as linhas de errorLogs:
SELECT * from errorLogs;
Devem ser devolvidas três linhas de dados, todas com [ERRO] na coluna t4:
+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ | errorlogs.t1 | errorlogs.t2 | errorlogs.t3 | errorlogs.t4 | errorlogs.t5 | errorlogs.t6 | errorlogs.t7 | +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ | 2012-02-03 | 18:35:34 | SampleClass0 | [ERROR] | incorrect | id | | | 2012-02-03 | 18:55:54 | SampleClass1 | [ERROR] | incorrect | id | | | 2012-02-03 | 19:25:27 | SampleClass4 | [ERROR] | incorrect | id | | +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ 3 rows selected (0.813 seconds)
Passos seguintes
Para obter informações mais gerais sobre o Hive no HDInsight, veja Utilizar o Apache Hive com o Apache Hadoop no HDInsight
Pode encontrar a referência de idioma do HiveQL no manual de idioma
Para obter mais informações sobre outras formas de trabalhar com o Hadoop no HDInsight, consulte Utilizar o MapReduce com o Apache Hadoop no HDInsight