Использование Beeline shell с Hive

HiveServer2 поддерживает Beeline shell. Это клиент JDBC, который основан на командном интерфейсе SQLLine. Документация SQLLine также применима и к Beeline.

Вы можете найти информацию о замене реализации командного интерфейса Hive на Beeline и о причинах такой замены в документации Apache Hive.

Beeline shell может работать как во встроенном (embedded), так и в удалённом (remote) режиме. Во встроенном режиме запускается встроенный Hive (аналогичный командному интерфейсу Hive), а в удалённом режиме Beeline подключается к отдельному процессу HiveServer2 через Thrift. Начиная с Hive 0.14, при использовании Beeline с HiveServer2, лог-сообщения HiveServer2 для выполняющихся запросов также выводятся в стандартный поток ошибок (STDERR). Удалённый режим рекомендуется для использования в production-среде, так как он более безопасен и не требует предоставления пользователям прямого доступа к HDFS/metastore.

В удалённом режиме HiveServer2 принимает только валидные запросы Thrift — даже при использовании HTTP тело сообщения должно содержать информацию (payloads) от Thrift.

Примеры

Базовое использование Beeline

Данный раздел показывает базовые операции с Beeline.

Чтобы открыть Beeline shell, выполните команду:

$ bin/beeline

Пример вывода команды можно увидеть ниже.

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/lib/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/lib/hadoop/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Beeline version 3.1.1 by Apache Hive

Чтобы присоединиться к Hive, выполните следующую команду в Beeline shell:

!connect jdbc:hive2://localhost:10000 scott tiger

Пример вывода команды можно увидеть ниже.

Connecting to jdbc:hive2://localhost:10000
Connected to: Apache Hive (version 3.1.1)
Driver: Hive JDBC (version 3.1.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
ПРИМЕЧАНИЕ
Если Hive работает в режиме высокой доступности, необходимо использовать специальный формат JDBC-строки.

Чтобы увидеть все Hive-таблицы, выполните следующую команду в Beeline shell:

show tables;

Данная команда выводит следующее:

+-------------------+
|     tab_name      |
+-------------------+
| primitives        |
| src               |
| src1              |
| src_json          |
| src_sequencefile  |
| src_thrift        |
| srcbucket         |
| srcbucket2        |
| srcpart           |
+-------------------+
9 rows selected (1.079 seconds)

Вы также можете указать параметры соединения в командной строке. Это значит, что можно найти команду со строкой соединения в истории вашей оболочки UNIX.

$ beeline -u jdbc:hive2://localhost:10000/default -n scott -w password_file

Beeline с соединением NoSASL

Если вы хотите установить соединение, используя NoSASL, нужно указать способ аутентификации в явном виде:

!connect jdbc:hive2://<host>:<port>/<db>;auth=noSasl hiveuser pass

Информация о доступных командах Beeline доступна на странице Командная строка Beeline.

Форматы вывода Beeline

В Beeline результат может отображаться в разных форматах. Формат устанавливается с помощью параметра outputformat.

Типы форматов вывода
Тип Описание

table

Результат отображается в виде таблицы. Строка результата является строкой таблицы, а значения в одной строке отображаются в разных колонках таблицы. Данный формат выбран по умолчанию

vertical

Каждая строка результата отображается в виде блока пар ключ/значение, где ключи являются названиями колонок

xmlattr

Результат отображается в формате XML, где каждая строка представлена XML-элементом result. Значения строки отображаются в виде атрибутов для элемента result. Названия атрибутов являются названиями колонок

xmlelements

Результат отображается в формате XML, где каждая строка представлена XML-элементом result. Значения строки отображаются в виде дочерних элементов элемента result

json

(Hive 4.0) Результат отображается в формате JSON, где каждая строка представлена элементом result в JSON-массиве resultset

jsonfile

(Hive 4.0) Результат отображается в формате JSON, где каждая строка является отдельным JSON-объектом. Это соответствует таблицам, созданным в формате JSONFILE

sv output formats

Результат отображается в виде строк с использованием разделителей (delimiters). Доступны пять форматов с разделителями: csv, tsv, csv2, tsv2 и dsv

Отмена запроса

При нажатии CTRL+C в Beeline shell во время выполняющегося запроса, Beeline пытается отменить запрос, закрывая сокет к HiveServer2. Это поведение Beeline доступно только если hive.server2.close.session.on.disconnect присвоено значение true. Начиная с Hive 2.2.0 Beeline shell не закрывается при отмене выполняемого запроса после нажатия CTRL+C. Если вы хотите закрыть Beeline shell, нажмите CTRL+C еще раз, пока запрос все еще отменяется. Однако, если нет выполняющегося запроса, то первый ввод CTRL+C повлечёт выход из Beeline shell. Это поведение аналогично командной строке Hive при обработке CTRL+C.

Рекомендация
Для выхода из Beeline shell рекомендуется использовать команду !quit.

Фоновый запрос в скрипте из терминала

Вы можете запускать Beeline без терминала для групповой обработки (batch processing) и автоматизации скриптов. Используйте команды nohup и disown.

Некоторые версии клиента Beeline могут требовать дополнительной настройки, чтобы команда nohup могла корректно переводить процесс Beeline в фоновый режим, не останавливая его.

Следующие переменные окружения могут быть изменены:

export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal"

Запуск с nohangup (nohup) и амперсандом (&) делает процесс фоновым и позволяет терминалу отсоединиться, сохраняя процесс Beeline запущенным.

nohup beeline --silent=true --showHeader=true --outputformat=dsv -f query.hql </dev/null > /tmp/output.log 2> /tmp/error.log &
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней