Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как использовать клиент Apache Beeline командной строки для создания и выполнения запросов Apache Hive по протоколу SSH.
Предыстория
Beeline — это клиент Hive, включенный в головные узлы кластера HDInsight. В этой статье описывается, как использовать это средство с помощью примеров с помощью запроса Hive и файла HiveQL.
Чтобы подключиться к клиенту Beeline, установленному в кластере HDInsight, или установить Beeline локально, следуйте инструкциям по подключению или установке Apache Beeline.
Beeline использует JDBC для подключения к HiveServer2, размещенном в кластере HDInsight. Вы также можете использовать Beeline для удаленного доступа к Hive в HDInsight через Интернет. В следующих примерах приведены наиболее распространенные строки подключения, используемые для подключения к HDInsight из Beeline.
Предварительные требования для примеров
Кластер Hadoop в Azure HDInsight. Если вам нужен кластер, следуйте нашему руководству по созданию кластера HDInsight.
Обратите внимание на схему URI для основного хранилища кластера. Например,
wasb://
для Azure Storage,abfs://
для Azure Data Lake Storage Gen2 илиadl://
для Azure Data Lake Storage Gen1. Если для службы хранилища Azure включена безопасная передача, универсальный код ресурса (URI) имеет значениеwasbs://
. Дополнительные сведения см. в разделе "Безопасная передача".Клиент SSH. Дополнительные сведения см. в руководстве по подключению к HDInsight (Apache Hadoop) с помощью SSH. Большинство шагов в этом документе предполагают, что вы используете Beeline из SSH-сеанса на кластере. Вы также можете использовать локальный клиент Beeline, но эти действия не рассматриваются в этой статье.
Выполнение запроса Hive
Этот пример основан на использовании клиента Beeline из подключения SSH.
Откройте подключение SSH к кластеру с помощью приведенного ниже кода. Замените
sshuser
на пользователя SSH для кластера и заменитеCLUSTERNAME
его именем. При появлении запроса введите пароль для учетной записи пользователя SSH.ssh [email protected]
Подключитесь к HiveServer2 с помощью клиента Beeline из открытого сеанса SSH, введя следующую команду:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Примечание.
Обратитесь к разделу "Использование кластера HDInsight Enterprise Security Package (ESP) с Kerberos" в руководстве "Подключение к HiveServer2 с помощью Beeline или установка Beeline на локальном устройстве для локального подключения", если вы используете кластер с поддержкой корпоративного пакета безопасности (ESP).
Команды Beeline начинаются с символа
!
, например,!help
отображает справку. Однако можно!
исключить для некоторых команд. Например,help
также работает.Существует
!sql
, который используется для выполнения запросов HiveQL. Тем не менее, HiveQL так часто используется, что можно пропустить предыдущий!sql
. Следующие два утверждения эквивалентны:!sql show tables; show tables;
В новом кластере отображается только одна таблица: hivesampletable.
Используйте следующую команду, чтобы отобразить схему для 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 | | +-----------------------+------------+----------+--+
Эти сведения описывают столбцы в таблице.
Введите следующие инструкции, чтобы создать таблицу с именем 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;
Эти утверждения совершают следующие действия.
Заявление Описание УДАЛИТЬ ТАБЛИЦУ Если таблица существует, она удаляется. СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ Создает внешнюю таблицу в Hive. Внешние таблицы хранят только определения таблицы в Hive. Данные остаются в исходном расположении. Формат строки Форматирование данных. В данном случае поля всех журналов разделены пробелом. СОХРАНЕНО В ВИДЕ ФАЙЛА ТЕКСТОВОЕ РАСПОЛОЖЕНИЕ Где хранятся данные и в каком формате файла. ВЫБЕРИТЕ Выбирает количество всех строк, в которых столбец 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)
Выход Beeline:
!exit
Запуск файла HiveQL
Этот пример является продолжением из предыдущего примера. Чтобы создать файл, выполните следующие действия, а затем запустите его с помощью Beeline.
Используйте следующую команду, чтобы создать файл с именем query.hql:
nano query.hql
Используйте следующий текст в качестве содержимого файла. Этот запрос создает новую "внутреннюю" таблицу с именем 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';
Эти инструкции выполняют описанные ниже действия.
Заявление Описание СОЗДАНИЕ ТАБЛИЦЫ, ЕСЛИ ОНА НЕ СУЩЕСТВУЕТ Если таблица еще не существует, она создана. Так как ключевое слово EXTERNAL не используется, эта инструкция создает внутреннюю таблицу. Внутренние таблицы хранятся в хранилище данных Hive и полностью управляются Hive. Хранится как ORC Сохраняет данные в формате оптимизированного столбца строк (ORC). Формат ORC — это оптимизированный и эффективный формат для хранения данных Hive. INSERT OVERWRITE ... ВЫБИРАТЬ Выбирает строки из таблицы log4jLogs , содержащей [ERROR], а затем вставляет данные в таблицу errorLogs . Примечание.
В отличие от внешних таблиц, удаление внутренней таблицы также удаляет базовые данные.
Чтобы сохранить файл, используйте Ctrl+X, затем введите Y, и, наконец, нажмите Enter.
Используйте следующую команду, чтобы запустить файл с помощью Beeline:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
Примечание.
Параметр
-i
запускает Beeline и запускает инструкции вquery.hql
файле. После завершения запроса вы возвращаетесь кjdbc:hive2://headnodehost:10001/>
приглашению. Вы также можете запустить файл с помощью-f
параметра, который завершает Beeline после завершения запроса.Чтобы убедиться, что таблица 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)
Дальнейшие действия
Дополнительные общие сведения о Hive в HDInsight см. в статье Использование Apache Hive с Apache Hadoop в HDInsight.
Справочник по языку HiveQL можно найти в руководстве по языку
Дополнительные сведения о других способах работы с Hadoop в HDInsight см. в статье "Использование MapReduce с Apache Hadoop в HDInsight"