Подключение к 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, можно устанавливать соединение.

  • Без Kerberos

  • Kerberos

  • LDAP

  • Через HTTP

Для кластера, который не использует аутентификацию Kerberos, используйте следующий синтаксис строки подключения:

jdbc:hive2://host:port/;auth=noSasl

Пример:

jdbc:hive2://host1.example.com:21050/;auth=noSasl

Используется протокол Binary TCP.

Чтобы подключиться к экземпляру Impala, для которого требуется аутентификация Kerberos:

jdbc:hive2://host:port/;principal=principal_name

Принципал должен быть принципалом того же пользователя, который используется при запуске Impala.

Пример:

jdbc:hive2://host1.example.com:21050/;principal=impala/host1.example.com@H2.EXAMPLE.COM

Используется протокол Binary TCP.

Чтобы подключиться к экземпляру Impala, для которого требуется аутентификация LDAP:

jdbc:hive2://host:port/db_name;user=ldap_userid;password=ldap_password

Пример:

jdbc:hive2://host1.example.com:21050/test_db;user=user1;password=password1

Используется протокол Binary TCP.

Чтобы подключиться к экземпляру Impala через HTTP, укажите порт HTTP (по умолчанию — 28000) и transportMode=http в строке подключения.

Пример:

jdbc:hive2://myhost.example.com:28000/;transportMode=http

Ограничения 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 чтобы сообщить о ней