Использование 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-элементом |
xmlelements |
Результат отображается в формате XML, где каждая строка представлена XML-элементом |
json |
(Hive 4.0) Результат отображается в формате JSON, где каждая строка представлена элементом |
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 &