Подключение к Impala через JDBC

Impala поддерживает стандартный интерфейс JDBC, который может быть использован для обеспечения доступа к данным из коммерческих инструментов Business Intelligence и другого программного обеспечения.

Чтобы настроить подключение JDBC к Impala, выполните следующие действия:

  1. Проверьте порт, на котором демоны Impala прослушивают входящие запросы JDBC.

  2. Установите драйвер JDBC на каждый хост, на котором работает приложение с поддержкой JDBC.

  3. Укажите строку подключения для приложения 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, выполните следующие шаги:

  1. Загрузите файлы JAR, перечисленные выше, на каждый клиентский хост. Для пользователей Maven обратитесь к странице the sample github page, содержащей пример зависимостей, которые вы можете добавить в файл pom вместо загрузки отдельных JAR-файлов.

  2. Сохраните файлы JAR. Можно сделать это в каталоге, на который уже есть ссылка в CLASSPATH. В Linux можно использовать расположение /opt/jars/. В Windows вы можете сохранить файлы в подкаталог папки C:\Program Files.

  3. Установите 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

  • SSL

  • SSL+Kerberos

  • LDAP

Для кластера, который не использует аутентификацию 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-тип JDBC ARRAY. Такое поведение соответствует поведению Hive. Тип STRUCT обрабатывается как SQL-тип JDBC STRUCT. Для поддержки совместимости с 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.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней