快速开始

Hive JDBC 入门

师成师成· 更新于 2026-09-29· 阅读 5 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

如何获取 Kyuubi JDBC 驱动

Kyuubi Thrift API 与 HiveServer2 完全兼容,因此从技术上讲,可以使用任意 Hive JDBC 驱动来连接 Kyuubi Server。但推荐使用 Kyuubi Hive JDBC 驱动,该驱动基于 Hive 3.1.x JDBC 驱动 fork 而来,旨在支持原版 Hive JDBC 驱动所缺失的一些功能。

该驱动可从 Maven Central 获取:

<dependency>
    <groupId>org.apache.kyuubi</groupId>
    <artifactId>kyuubi-hive-jdbc-shaded</artifactId>
    <version>1.7.0</version>
</dependency>

连接到未启用 Kerberos 的 Kyuubi 服务

以下 Java 代码通过 JDBC 直接连接 Kyuubi 服务,不使用 Kerberos 认证。

package org.apache.kyuubi.examples;

import java.sql.*;

public class KyuubiJDBC {

  private static String driverName = "org.apache.kyuubi.jdbc.KyuubiHiveDriver";
  private static String kyuubiJdbcUrl = "jdbc:kyuubi://localhost:10009/default;";

  public static void main(String[] args) throws SQLException {
    try (Connection conn = DriverManager.getConnection(kyuubiJdbcUrl)) {
      try (Statement stmt = conn.createStatement()) {
        try (ResultSet rs = stmt.executeQuery("show databases")) {
          while (rs.next()) {
            System.out.println(rs.getString(1));
          }
        }
      }
    }
  }
}

连接到启用 Kerberos 的 Kyuubi 服务器

以下 Java 代码使用 keytab 文件进行登录,并通过 JDBC 连接到 Kyuubi 服务器。

package org.apache.kyuubi.examples;

import java.sql.*;

public class KyuubiJDBCDemo {

  private static String driverName = "org.apache.kyuubi.jdbc.KyuubiHiveDriver";
  private static String kyuubiJdbcUrlTemplate = "jdbc:kyuubi://localhost:10009/default;" +
          "kyuubiClientPrincipal=%s;kyuubiClientKeytab=%s;kyuubiServerPrincipal=%s";

  public static void main(String[] args) throws SQLException {
    String clientPrincipal = args[0]; // Kerberos principal
    String clientKeytab = args[1];    // Keytab file location
    String serverPrincipal = args[2]; // Kerberos principal used by Kyuubi Server
    String kyuubiJdbcUrl = String.format(kyuubiJdbcUrlTemplate, clientPrincipal, clientKeytab, serverPrincipal);
    try (Connection conn = DriverManager.getConnection(kyuubiJdbcUrl)) {
      try (Statement stmt = conn.createStatement()) {
        try (ResultSet rs = stmt.executeQuery("show databases")) {
          while (rs.next()) {
            System.out.println(rs.getString(1));
          }
        }
      }
    }
  }
}

评论

登录后参与评论

正在加载评论…