Usar o cliente Apache Beeline com Apache Hive

Este artigo descreve como usar o cliente apache Beeline de linha de comando para criar e executar consultas do Apache Hive em uma conexão SSH.

Segundo plano

O Beeline é um cliente Hive que está incluído em nós principais do cluster HDInsight. Este artigo descreve como usar essa ferramenta por meio de exemplos que usam uma consulta do Hive e um arquivo HiveQL.

Para se conectar ao cliente Beeline instalado no cluster do HDInsight ou instalar o Beeline localmente, siga nosso guia para conectar-se ao Apache Beeline ou instalá-lo.

O Beeline usa o JDBC para se conectar ao HiveServer2, um serviço hospedado em seu cluster HDInsight. Você também pode usar o Beeline para acessar remotamente o Hive no HDInsight pela internet. Os exemplos a seguir fornecem as cadeias de caracteres de conexão mais comuns usadas para se conectar ao HDInsight do Beeline.

Pré-requisitos para exemplos

  • Um cluster Hadoop no Azure HDInsight. Se você precisar de um cluster, siga nosso guia para criar um cluster do HDInsight.

  • O esquema de URI do seu armazenamento primário de clusters. Por exemplo, wasb:// para o Armazenamento do Azure, abfs:// para o Azure Data Lake Storage Gen2 ou adl:// para o Azure Data Lake Storage Gen1. Se a transferência segura estiver habilitada para o Armazenamento do Azure, o URI será wasbs://. Para obter mais informações, consulte Proteger transferência.

  • Um cliente SSH. Para saber mais, confira Conectar-se ao HDInsight (Apache Hadoop) usando SSH. A maioria das etapas neste documento pressupõe que você está usando o Beeline em uma sessão SSH para o cluster. Você também pode usar um cliente Beeline local, mas essas etapas não são abordadas neste artigo.

Executar um trabalho do Hive

Este exemplo se baseia no uso do cliente Beeline de uma conexão SSH.

  1. Abra uma conexão SSH com o cluster com o código abaixo. Substitua sshuser pelo usuário do SSH do cluster e substitua CLUSTERNAME pelo nome do cluster. Se solicitado, insira a senha para a conta de usuário SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Conecte-se ao HiveServer2 com o cliente Beeline da sessão SSH aberta inserindo o seguinte comando:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    

    Observação

    Consulte a parte "Para o cluster ESP (Enterprise Security Package) do HDInsight usando Kerberos" em Conectar-se ao HiveServer2 usando o Beeline ou instalar o Beeline localmente para se conectar em seu local se você estiver usando um cluster habilitado para ESP (Enterprise Security Package)

  3. Os comandos Beeline normalmente começam com um caractere !, por exemplo, !help exibe a ajuda. No entanto, o ! pode ser omitido para alguns comandos. Por exemplo, help também funciona.

    Há um !sql, que é usado para executar instruções HiveQL. No entanto, o HiveQL é tão usado que é possível omitir o !sqlanterior. As duas instruções a seguir são equivalentes:

    !sql show tables;
    show tables;
    

    Em um novo cluster, somente uma tabela é listada: hivesampletable.

  4. Use o comando a seguir para exibir o esquema para a hivesampletable:

    describe hivesampletable;
    

    Esse comando retorna as informações a seguir:

    +-----------------------+------------+----------+--+
    |       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     |          |
    +-----------------------+------------+----------+--+
    

    Essas informações descrevem as colunas na tabela.

  5. Insira as instruções a seguir para criar uma tabela chamada log4jLogs usando os dados de exemplo fornecidos com o cluster HDInsight: (Revise conforme necessário com base em seu esquema de 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;
    

    Essas instruções executam as seguintes ações:

    Instrução Descrição
    DROP TABLE Se a tabela existir, ela será excluída.
    CREATE EXTERNAL TABLE Crie uma tabelaexterna no Hive. Tabelas externas só armazenam a definição da tabela no Hive. Os dados são mantidos no local original.
    FORMATO DA LINHA O modo como os dados são formatados. Nesse caso, os campos em cada log são separados por um espaço.
    ARMAZENADO COMO ARQUIVO DE TEXTO LOCAL O local em que os dados são armazenados e em qual formato de arquivo.
    SELECT Seleciona uma contagem de todas as linhas em que a coluna t4 contém o valor [ERROR] . Essa consulta deve retornar um valor de 3, já que existem três linhas que contêm esse valor.
    INPUT__FILE__NAME LIKE '%.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 incorretos nos resultados, essa instrução informa ao Hive que deve retornar apenas dados de arquivos que terminam em .log.

    Observação

    As tabelas externas devem ser usadas quando você espera que os dados subjacentes sejam atualizados por uma fonte externa. Por exemplo, um processo de upload de dados automatizado ou uma operação MapReduce.

    Remover uma tabela externa não exclui os dados, somente a definição de tabela.

    A saída desse comando é semelhante ao texto a seguir:

    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)
    
  6. Saia do Beeline:

    !exit
    

Executar um arquivo HiveQL

Este exemplo é uma continuação do exemplo anterior. Use as etapas a seguir para criar um arquivo e executá-lo usando o Beeline.

  1. Use o comando a seguir para criar um novo arquivo chamado query.hql:

    nano query.hql
    
  2. Use o texto a seguir como conteúdo do arquivo. Essa consulta cria uma nova tabela 'interna' chamada 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';
    

    Essas instruções executam as seguintes ações:

    Instrução Descrição
    CRIAR TABELA SE NÃO EXISTE Se a tabela ainda não existir, ela será criada. Uma vez que a palavra-chave EXTERNA não é usada, essa instrução cria uma tabela interna. As tabelas internas são armazenadas no data warehouse do Hive e totalmente gerenciadas por ele.
    ARMAZENADO COMO ORC Armazena os dados no formato OCR (Optimized Row Columnar). O formato ORC é altamente otimizado e eficiente para o armazenamento de dados do Hive.
    INSERIR SUBSTITUIÇÃO... SELECIONAR Seleciona linhas da tabela log4jLogs que contêm [ERROR] e insere os dados na tabela errorLogs.

    Observação

    Diferentemente de tabelas externas, o descarte de uma tabela interna excluirá também os dados subjacentes.

  3. Para salvar o arquivo, use Ctrl+X, insira Y e, por fim, Enter.

  4. Use o seguinte para executar o arquivo usando Beeline:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
    

    Observação

    O parâmetro -i inicia o Beeline e executa as instruções no arquivo query.hql. Quando a consulta for concluída, você verá um prompt jdbc:hive2://headnodehost:10001/>. Você também pode executar um arquivo usando o parâmetro -f, que fechará o Beeline após a conclusão da consulta.

  5. Para verificar se a tabela errorLogs foi criada, use a seguinte instrução para retornar todas as linhas de errorLogs:

    SELECT * from errorLogs;
    

    Três linhas de dados devem ser devolvidas, todas contendo [ERROR] 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)
    

Próximas etapas