Hive通过Jdbc连接HiveServer2

时间:2022-07-24
本文章向大家介绍Hive通过Jdbc连接HiveServer2,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Hive 版本:2.3.7

1. 配置

如果想通过 JDBC 来访问 HiveServer2,需要开启 HiveServer2 服务,具体请参阅 如何启动HiveServer2

2. URL格式

JDBC客户端允许使用 Java 代码连接到 HiveServer2。可以在远程,嵌入式或 HTTP 模式下建立 JDBC 连接。以下是不同模式的配置:

  • 远程模式下 Url 格式为 jdbc:hive2://<host>:<port>/<database>,默认情况下 HiveServer2 的端口为 10000。
  • 内嵌模式下 Url 格式为 jdbc:hive2://,不需要提供主机与端口号。
  • 如果 HiveServer2 以 http 模式运行,Url 格式为 jdbc:hive2://<host>:<port>/<db>? hive.server2.transport.mode=http;hive.server2.thrift.http.path= <http_endpoint>, 在 hive-site.xml 配置文件中进行配置,默认值为 cliservice。HTTP 传输模式的默认端口为 10001。

3. Maven 依赖

如果你使用的是 Maven,需要在 pom.xml 中添加以下依赖项:

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>2.3.7</version>
</dependency>

4. 开发

第一步加载 JDBC 驱动类:

Class.forName("org.apache.hive.jdbc.HiveDriver");

第二步通过使用 JDBC 驱动创建 Connection 对象来连接到数据库:

Connection conn = DriverManager.getConnection("jdbc:hive2://<host>:<port>/<database>","<user>","<password>");

默认情况下端口为 10000,如果 HiveServer2 在非安全环境中运行,密码可以忽略不写:

Connection conn = DriverManager.getConnection("jdbc:hive2://127.0.0.1:10000/default","hadoop","");

第三步通过执行如下代码来执行查询:

Statement	stmt	=	conn.createStatement();
ResultSet	resultSet	=	stmt.executeQuery("SELECT	*	FROM tmp_table");

最后一步处理 ResultSet 返回的结果:

int columns= resultSet.getMetaData().getColumnCount();
int rowIndex = 1;
while (resultSet.next()) {
    for(int i = 1;i <= columns; i++) {
        System.out.println("RowIndex: " + rowIndex + ", ColumnIndex: " + i + ", ColumnValue: " + resultSet.getString(i));
    }
}

详细代码请参阅:JdbcExample

5. JDBC数据类型

下表为 HiveServer2 列出了 Hive数据类型与 Java 数据类型之间的映射关系: