Подключение к Impala через JDBC
Impala поддерживает стандартный интерфейс JDBC, который может быть использован для обеспечения доступа к данным из коммерческих инструментов Business Intelligence и другого программного обеспечения.
Чтобы настроить подключение JDBC к Impala, выполните следующие действия:
-
Проверьте порт, на котором демоны Impala прослушивают входящие запросы JDBC.
-
Установите драйвер JDBC на каждый хост, на котором работает приложение с поддержкой JDBC.
-
Укажите строку подключения для приложения JDBC к одному из серверов, на котором работает демон impalad, с соответствующими настройками безопасности.
Настройка порта JDBC
Значения портов по умолчанию, на которых демоны Impala принимают соединения JDBC, перечислены в таблице ниже.
| Протокол | Значение по умолчанию | Параметр |
|---|---|---|
HTTP |
28000 |
hs2_http_port |
Binary TCP |
21050 |
hs2_port |
Чтобы изменить эти порты, перейдите на страницу Components сервиса Impala в пользовательском интерфейсе ADCM, выберите Impala Daemon, откройте вкладку Primary Configuration и укажите необходимый параметр (hs2_http_port или hs2_port).
Включение поддержки Impala JDBC на клиентских системах
Драйвер Hive JDBC установлен на хостах с Impala в кластере ADH. Он представляет собой пакет hive-jdbc.noarch.
Если вы используете приложения с поддержкой JDBC на хостах за пределами кластера ADH, установите драйвер JDBC (пакет hive-jdbc) по крайней мере на одном хосте внешнего кластера. Для этого можно использовать менеджер пакетов Linux. Затем загрузите следующие файлы JAR на каждую клиентскую машину, которая должна использовать JDBC с Impala:
-
commons-logging-X.X.X.jar
-
hadoop-common.jar
-
hive-common-X.XX.X.jar
-
hive-jdbc-X.XX.X.jar
-
hive-metastore-X.XX.X.jar
-
hive-service-X.XX.X.jar
-
httpclient-X.X.X.jar
-
httpcore-X.X.X.jar
-
libfb303-X.X.X.jar
-
libthrift-X.X.X.jar
-
log4j-X.X.XX.jar
-
slf4j-api-X.X.X.jar
-
slf4j-logXjXX-X.X.X.jar
Чтобы включить поддержку JDBC для Impala в системе, где вы запускаете приложение JDBC, выполните следующие шаги:
-
Загрузите файлы JAR, перечисленные выше, на каждый клиентский хост. Для пользователей Maven обратитесь к странице the sample github page, содержащей пример зависимостей, которые вы можете добавить в файл pom вместо загрузки отдельных JAR-файлов.
-
Сохраните файлы JAR. Можно сделать это в каталоге, на который уже есть ссылка в CLASSPATH. В Linux можно использовать расположение /opt/jars/. В Windows вы можете сохранить файлы в подкаталог папки C:\Program Files.
-
Установите CLASSPATH, включающий путь к файлам JAR. Чтобы успешно загрузить драйвер Impala JDBC, клиентские программы должны найти связанные файлы JAR. Для этого в большинстве случаев нужно установить переменную CLASSPATH. Несколько примеров установки переменной приведены ниже. За дополнительными сведениями об установке драйверов JDBC обратитесь к документации вашего клиента JDBC.
В Linux, если вы извлекли файлы JAR в /opt/jars/, можно выполнить следующую команду:
$ export CLASSPATH=/opt/jars/*.jar:$CLASSPATHВ Windows откройте Свойства системы в Панели управления и измените переменные среды. Установите переменные среды таким образом, чтобы они включали путь к извлеченным файлам JAR.
Имя класса драйвера Hive JDBC — org.apache.hive.jdbc.HiveDriver.
Строки подключения для драйвера Hive JDBC
После того как Impala настроена для работы с JDBC, можно устанавливать соединение.
|
ВАЖНО
При использовании HTTP в качестве транспорта следует выполнить команду kinit перед установкой соединения с БД.
|
Для кластера, который не использует аутентификацию Kerberos, используйте следующий синтаксис строки подключения:
jdbc:hive2://<hostname>:<port>/;auth=noSasl
Пример для TCP:
jdbc:hive2://host1.example.com:21050/;auth=noSasl
Пример для HTTP:
jdbc:hive2://host1.example.com:28000/;transportMode=http;auth=noSasl
Чтобы подключиться к экземпляру Impala с использованием SSL:
jdbc:hive2://<hostname>:<port>/;ssl=true;sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>;principal=<principal_name>
Пример для TCP:
jdbc:hive2://host1.example.com:21050/;ssl=true;sslTrustStore=/tmp/truststore.jks;trustStorePassword=bigdata;principal=hive/_HOST@EXAMPLE.COM
Пример для HTTP:
jdbc:hive2://host1.example.com:28000/;transportMode=http;ssl=true;sslTrustStore=/tmp/truststore.jks;trustStorePassword=bigdata;principal=hive/_HOST@EXAMPLE.COM
Чтобы подключиться к экземпляру Impala, для которого требуется аутентификация Kerberos с использованием SSL:
jdbc:hive2://<hostname>:<port>/;principal=<principal_name>/hostname@EXAMPLE.COM;ssl=true;sslTrustStore=<truststore_path>;trustStorePassword=<truststore_pass>
Принципал должен быть принципалом того же пользователя, который используется при запуске Impala.
Пример для TCP:
jdbc:hive2://host1.example.com:21050/;principal=impala/host1.example.com@EXAMPLE.COM;ssl=true;sslTrustStore=/tmp/truststore.jks;trustStorePassword=bigdata
Пример для HTTP:
jdbc:hive2://host1.example.com:28000/;transportMode=http;principal=impala/host1.example.com@EXAMPLE.COM;ssl=true;sslTrustStore=/tmp/truststore.jks;trustStorePassword=bigdata
Чтобы подключиться к экземпляру Impala, для которого требуется аутентификация LDAP:
jdbc:hive2://<hostname>:<port>/<db_name>;user=<ldap_userid>;password=<ldap_password>
Пример для TCP:
jdbc:hive2://host1.example.com:21050/test_db;user=user1;password=password1
Пример для HTTP:
jdbc:hive2://host1.example.com:28000/test_db;transportMode=http;user=user1;password=password1
Ограничения JDBC
Большинство функций SQL Impala работают одинаково через интерпретатор impala-shell и через API JDBC, но есть некоторые исключения:
-
Запросы со сложными типами (
ARRAY,STRUCTиMAP) требуют обозначения, которое может быть недоступно на всех уровнях драйвера JDBC. Вы можете создать представление (view), явлющееся упрощенной версией сложных типов, и настроить приложение на работу с представлением. За дополнительной информацией обратитесь к статье Complex Types. -
Сложные типы Impala поддерживаются методом JDBC
getColumns(). ИMAP, иARRAYобрабатываются как SQL-тип JDBCARRAY. Такое поведение соответствует поведению Hive. ТипSTRUCTобрабатывается как SQL-тип JDBCSTRUCT. Для поддержки совместимости с Hive, полеTYPE_NAMEдля скалярных типов заполняется именами примитивных типов. Для сложных типов выполняется методtoSQL(). Полученные имена типов не полностью консистентны. В таблице ниже показано, какtoSQL()преобразует типы.Исходный тип Результирующий тип DECIMAL(10,10)
DECIMAL
CHAR(10)
CHAR
VARCHAR(10)
VARCHAR
ARRAY<DECIMAL(10,10)>
ARRAY<DECIMAL(10,10)>
ARRAY<CHAR(10)>
ARRAY<CHAR(10)>
ARRAY<VARCHAR(10)>
ARRAY<VARCHAR(10)>
-
В настоящее время операторы Impala
INSERT,UPDATEи другие операторы DML, выполняемые через интерфейс JDBC над таблицами Kudu, не возвращают ошибок JDBC при таких условиях, как, например, дублирование столбцов первичного ключа. Тем не менее в приложениях, которые выполняют большое количество операторов DML, лучше использовать непосредственно Kudu Java API вместо JDBC.