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

В данной статье показаны способы подключения к HiveServer2 с использованием интерфейса JDBC, который является рекомендуемым методом клиентского взаимодействия с Hive. В статье представлены примеры подключения с помощью простой Java-программы, а также с использованием DBeaver — средства работы с базами данных, которое использует JDBC.

Для подключения к Hive в керберизированном кластере необходимо выполнить действия Kerberos, такие как установка клиента Kerberos, получение тикета, настройка krb5.conf и так далее. Больше подробной информации доступно в статье Обзор Kerberos.

Строка JDBC-подключения

Ниже доступны примеры строк JDBC-подключения в зависимости от используемых в ADH-кластере механизмов безопасности. Актуальная для вашего ADH-кластера строка JDBC-подключения доступна на странице Hive Info в ADCM (ClustersServicesHiveInfo).

  • Без SSL/Kerberos

  • Режим HTTP

  • SSL

  • SSL+Kerberos

Устанавливает соединение в режиме высокой доступности, соединение не защищено:

jdbc:hive2://<cluster_host_0>:2181,<cluster_host_1>:2181,<cluster_host_N>:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=arenadata/cluster/<cluster_id>/<namespace>

Устанавливает соединение в HTTP-режиме, соединение не защищено:

jdbc:hive2://<cluster_host_0>:2181,<cluster_host_1>:2181,<cluster_host_N>:2181/;transportMode=http;httpPath=<hive_endpoint>

Где <hive_endpoint> — это HTTP endpoint, установленный параметром hive.server2.thrift.http.path в hive-site.xml.

Устанавливает соединение в режиме высокой доступности, соединение защищено с помощью SSL:

jdbc:hive2://<cluster_host_0>:2181,<cluster_host_1>:2181,<cluster_host_N>:2181;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=arenadata/cluster/<cluster_id>/<namespace>;ssl=true;sslTrustStore=/tmp/truststore.jks;trustStorePassword=bigdata

Устанавливает соединение в режиме высокой доступности, соединение защищено с помощью SSL+Kerberos:

jdbc:hive2://<cluster_host_0>:2181,<cluster_host_1>:2181,<cluster_host_N>:2181;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=arenadata/cluster/<cluster_id>/<namespace>;ssl=true;sslTrustStore=/tmp/truststore.jks;trustStorePassword=bigdata;principal=hive/_HOST@EXAMPLE.COM

Где EXAMPLE.COM — ваш Kerberos realm, например RU-CENTRAL1.INTERNAL.

Представленные выше примеры JDBC-подключений предназначены для соединения с HiveServer2 в режиме высокой доступности (High Availability, HA). Однако вы также можете подключиться к HiveServer2 напрямую, в non-HA режиме, используя порт сервера Thrift (по умолчанию 10000). В таком случае строка JDBC-подключения имеет вид jdbc:hive2://<cluster_host>:10000/.

Соотношение типов данных JDBC

В таблице ниже описано соответствие типов данных Hive и Java.

Тип данных Hive Тип данных Java Примечание

TINYINT

byte

Знаковое/беззнаковое целое число (1 байт)

SMALLINT

short

Знаковое целое число (2 байта)

INT

int

Знаковое целое число (4 байта)

BIGINT

long

Знаковое целое число (8 байт)

FLOAT

double

Число одинарной точности

DOUBLE

double

Число двойной точности

DECIMAL

java.math.BigDecimal

Число с фиксированной точностью

BOOLEAN

boolean

1 бит (0 или 1)

STRING

String

Последовательность символов произвольной длины

TIMESTAMP

java.sql.Timestamp

Значения даты/времени

BINARY

String

Бинарные данные

ARRAY

String (json-encoded)

Значения одного типа

MAP

String (json-encoded)

Пары ключ/значение

STRUCT

String (json-encoded)

Структурированные данные

Примеры

Java

Следующий Java-код реализует подключение к HiveServer2 с помощью стандартных средств JDBC. В программе используется класс драйвера org.apache.hive.jdbc.HiveDriver из hive-jdbc-3.1.1-arenadata-standalone.jar, который можно загрузить из Maven-репозитория. Данный standalone JAR содержит все зависимости, необходимые для использования драйвера на хостах за пределами кластера ADH.

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJdbcClient {
  private static String driverName = "org.apache.hive.jdbc.HiveDriver"; (1)

  public static void main(String[] args) throws SQLException {
      try {
      Class.forName(driverName);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
      System.exit(1);
    }

    Connection con = DriverManager.getConnection("jdbc:hive2://ka-adh-1.ru-central1.internal:2181," +
"ka-adh-3.ru-central1.internal:2181,ka-adh-2.ru-central1.internal:2181/;serviceDiscoveryMode=zooKeeper;" +
"zooKeeperNamespace=arenadata/cluster/2/hiveserver2", "hive", ""); (2)

    // Connection con = DriverManager.getConnection("jdbc:hive2://ka-adh-1.ru-central1.internal:10000/test_db", "hive", ""); (3)

    Statement stmt = con.createStatement();
    String tableName = "testHiveDriverTable";
    stmt.execute("drop table if exists " + tableName);
    stmt.execute("create table " + tableName + " (key int, value string)");
    // show tables
    String sql = "show tables '" + tableName + "'";
    System.out.println("Running query: " + sql);
    ResultSet res = stmt.executeQuery(sql);
    while (res.next()) {
      System.out.println(res.getString(1));
    }

    // other Hive queries
  }
}
1 Имя класса драйвера.
2 Строка подключения JDBC для соединения с Hive в режиме высокой доступности.
3 Строка подключения JDBC для соединения с Hive в non-HA режиме, через порт Thrift-сервера.

Подключение с помощью DBeaver

DBeaver — это инструмент для работы с базами данных с открытым исходным кодом, который использует интерфейс JDBC для подключения к Hive. Для подключения к HiveServer2 из DBeaver достаточно указать соответствующую строку подключения JDBC, и Hive автоматически загрузит драйвер по умолчанию org.apache.hive.jdbc.HiveDriver.

Установка соединения с Hive в DBeaver
Настройки подключения к Hive
Установка соединения с Hive в DBeaver
Настройки подключения к Hive
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней