Поделиться через


Использование клиента Apache Beeline с Apache Hive

В этой статье объясняется, как использовать клиент командной строки Apache Beeline для создания и выполнения запросов Apache Hive через SSH-подключение.

Историческая справка

Beeline — это клиент Hive, установленный на головных узлах кластера HDInsight. В этой статье объясняется, как использовать это средство в примерах с помощью запроса Hive и файла HiveQL.

Чтобы подключиться к клиенту Beeline, установленному в кластере HDInsight, или установить Beeline локально, воспользуйтесь нашим руководством по подключению или установка Apache Beeline.

Он подключается к службе HiveServer2, размещенной на кластере HDInsight, с помощью JDBC. Beeline также позволяет удаленно подключаться к Hive в HDInsight через Интернет. В примерах ниже приведены наиболее распространенные строки подключения, используемые для подключения к HDInsight из Beeline.

Предварительные требования для примеров

  • Кластер Hadoop в Azure HDInsight. Если вам нужен кластер, воспользуйтесь нашим руководством по созданию кластера HDInsight.

  • Обратите внимание на схему универсального кода ресурса (URI) для основного хранилища кластера. Например, wasb:// для службы хранилища Azure, abfs:// для Azure Data Lake Storage 2-го поколения или adl:// для Azure Data Lake Storage 1-го поколения. Если для службы хранилища Azure включена безопасная передача, URI будет таким: wasbs://. Дополнительные сведения см. в статье Безопасная передача.

  • Клиент SSH. Дополнительные сведения см. в руководстве по подключению к HDInsight (Apache Hadoop) с помощью SSH. Большинство действий, описанных в этом руководстве, выполняются в клиенте Beeline из сеанса SSH в кластере. Вы также можете использовать локальный клиент Beeline, но соответствующие действия в этой статье не описаны.

Выполнение запроса Hive

Этот пример основан на использовании клиента Beeline из сеанса SSH.

  1. Откройте SSH-подключение к кластеру, используя приведенный ниже код. Замените sshuser именем пользователя SSH для кластера, а CLUSTERNAME — именем кластера. При появлении запроса введите пароль для учетной записи пользователя SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Подключитесь к HiveServer2 с помощью клиента Beeline из открытого сеанса SSH, введя следующую команду:

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

    Примечание

    Если вы используете кластер с поддержкой Корпоративного пакета безопасности (ESP), см. раздел "Подключение к кластеру Корпоративного пакета безопасности (ESP) HDInsight с помощью Kerberos" статьи Подключение к HiveServer2 с использованием Beeline или локальная установка Beeline для подключения с локального устройства.

  3. Команды Beeline начинаются со знака !. Например, !help выводит справку. Однако в некоторых командах ! можно опустить. Например, help также работает.

    !sql используется для выполнения инструкций HiveQL. Однако эти инструкции настолько распространены, что !sqlтоже можно опустить. Приведенные ниже две инструкции эквивалентны.

    !sql show tables;
    show tables;
    

    В новом кластере отображена только одна таблица, hivesampletable.

  4. Используйте следующую команду, чтобы отобразить схему для таблицы hivesampletable.

    describe hivesampletable;
    

    Эта команда возвращает приведенные ниже сведения.

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

    Они описывают столбцы в таблице.

  5. Введите инструкции ниже, чтобы создать таблицу log4jLogs, используя демонстрационные данные, предоставляемые с кластером HDInsight. Внесите необходимые изменения в соответствии со схемой 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;
    

    Эти инструкции выполняют описанные ниже действия.

    Инструкция Описание
    DROP TABLE Если таблица существует, она будет удалена.
    CREATE EXTERNAL TABLE Создает внешнюю таблицу в Hive. Внешние таблицы хранят только определения таблицы в Hive. Данные остаются в исходном расположении.
    ROW FORMAT Настройка форматирования данных. В данном случае поля всех журналов разделены пробелом.
    STORED AS TEXTFILE LOCATION Указывает расположение для хранения данных и их формат.
    SELECT выбирает подсчет количества строк, в которых столбец t4 содержит значение [ERROR] . Этот запрос должен вернуть значение 3, так как таблица содержит три строки с данным значением.
    INPUT__FILE__NAME LIKE '%.log' Hive пытается применить схему ко всем файлам в каталоге. В этом случае каталог содержит файлы, которые не соответствуют схеме. Чтобы исключить лишние данные в результатах, эта инструкция указывает Hive возвращать данные только из файлов, заканчивающихся на .log.

    Примечание

    Внешние таблицы следует использовать, если исходные данные должны обновляться с использованием внешних источников. Например, процессом автоматизированной передачи данных или другой операцией MapReduce.

    Удаление внешней таблицы не приводит к удалению данных, будет удалено только определение таблицы.

    После выполнения этой команды вы должны увидеть текст, аналогичный приведенному ниже.

    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. Выйдите из Beeline:

    !exit
    

Запуск файла HiveQL.

Этот пример является продолжением предыдущего. Чтобы создать файл, а затем запустить его с помощью Beeline, выполните следующие действия.

  1. Создайте файл query.hql, используя следующую команду.

    nano query.hql
    
  2. В качестве содержимого файла добавьте следующий текст: Этот запрос создает "внутреннюю" таблицу 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';
    

    Эти инструкции выполняют описанные ниже действия.

    Инструкция Описание
    CREATE TABLE IF NOT EXISTS Если таблица не существует, она будет создана. Так как ключевое слово EXTERNAL не используется, эта инструкция создает внутреннюю таблицу. Внутренние таблицы хранятся в хранилище данных Hive и полностью управляются Hive.
    STORED AS ORC Позволяет сохранить данные в формате ORC. Это высокооптимизированный и эффективный формат для хранения данных Hive.
    INSERT OVERWRITE ... SELECT выбирает строки из таблицы log4jLogs, которые содержат значение [ERROR], а затем вставляет данные в таблицу errorLogs.

    Примечание

    В отличие от внешних таблиц, удаление внутренней таблицы приводит к удалению базовых данных.

  3. Чтобы сохранить файл, нажмите клавиши CTRL+X, введите Y и нажмите клавишу ВВОД.

  4. Запустите файл с помощью Beeline, используя следующую команду:

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

    Примечание

    Параметр -i запускает Beeline и выполняет инструкции в файле query.hql. После выполнения запроса отобразится командная строка jdbc:hive2://headnodehost:10001/>. Можно также выполнить файл с помощью параметра -f, который завершает работу Beeline после завершения выполнения запроса.

  5. Чтобы убедиться, что таблица errorLogs создана, выполните приведенную ниже инструкцию (она выводит все строки из таблицы errorLogs).

    SELECT * from errorLogs;
    

    В результате операции должны быть возвращены три строки со значением [ERROR] в столбце 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)
    

Дальнейшие действия