Java连接Hive踩坑血泪

Java连接Hive踩坑血泪 java.sql.SQLException: Method not supported

  • 今天突然接到一个需求:为部署在医院内部系统增加Hive连接方式,在一顿操作之后加上JDBC驱动以及hadoop-common依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
xml复制代码<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.1.1</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.hive</groupId>
<artifactId>hive-shims</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
  • 然后就在测试环境出了问题:java.sql.SQLException: Method not supported

image-20210603143916246

  • 在经过一段时间面向google编程后(下图),觉得可能是Hive版本和JDBC版本不兼容,在确定了测试环境版本是2.1.0版本Hive后立马松了口气,因为医院Hive版本是1.1.0的,觉得报错也是正常的,在更换了JBDC驱动版本为2.1.0之后连接测试环境Hive是正常使用的,因此自信满满更新了医院的系统。 image-20210603141307159
  • 结果更新了医院系统使用Hive还一样的报错:java.sql.SQLException: Method not supported

没有多想觉得还是医院版本驱动不兼容,在官网
看到这么1.1.0驱动的时候感觉头都大了,心里觉得Hive这么垃圾吗?版本驱动兼容都不做。

image-20210603142811297

  • 在经过两个小时的摸索,总觉得不对劲,仔细看了报错后发现忽略了最关键的信息

image-20210603144213959

仔细看了代码之后发现获取数据连接是正常,只是在查询测试sql语句的时候报错了,这个报错是HiveStatement.setQueryTimeout报的错误,这个方法是设置查询语句超时时间的

image-20210603144610066

DBUtil.query代码

image-20210603145218908

当看了HiveStatement源码之后就终于破案了

image-20210603145059723

原来hive-jdbc-1.1.0驱动不允许设置查询超时时间,只要去掉查询超时时间的配置,就能正常使用了。从网上查询的解决办法千篇一律都是说版本不兼容,需要更换版本,实在是误导大家,因此在记录问题的同时也给和我遇到同样问题的朋友一点解决思路。

ps

  • hive-jdbc-2.1.0驱动是可以设置查询语句超时时间的,所以在测试环境使用hive-jdbc-2.1.0驱动连接Hive是没有问题的。

image-20210603150811158

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%