Could not open client transport with JDBC Uri xxx、Caused by: org.apache.hive.org.apache.thrif

本文记录了在Windows环境下,使用jdbc连接Hive时遇到的Kerberos认证问题。错误表现为Invalid status 72,原因是HTTP模式连接缺少必要参数。解决方案是添加`transportMode=http;httpPath=cliservice`到URL中,成功建立连接。此经验可供遇到类似问题的读者参考。
摘要由CSDN通过智能技术生成

当我遇到这个报错信息,也各种进行了网上查找,但都没解决我的问题。 最后解决了问题,在这里做一下备忘记录:

首先我是jdbc连接hive,采用kerberos认证的方式。ps:若是windows上进行连接,记得在hosts文件中做相关使用到的域名映射,否则kb认证则会一直报异常的。

如:aused by: org.apache.hadoop.security.KerberosAuthException: failure to login: for principal: riskdw@TEBON.COM

书归正题,说一下题目的异常,报错的时候我使用的url连接如下

url = "jdbc:hive2://poc.namenode.tebon.com:10001/;principal=hive/_HOST@TEBON.COM";

使用zookeeper形式的url获取数据库连接正常:

zkUrl = "jdbc:hive2://poc.datanode1.tebon.com:2181,poc.datanode2.tebon.com:2181,poc.namenode.tebon.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2";

报错信息为:

java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://poc.namenode.tebon.com:10001/;principal=hive/_HOST@TEBON.COM: Invalid status 72

Caused by: org.apache.hive.org.apache.thrift.transport.TTransportException: Invalid status 72

具体堆栈信息如下:

java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://poc.namenode.tebon.com:10001/;principal=hive/_HOST@TEBON.COM: Invalid status 72
	at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:333)
	at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at com.kingstar.executor.ExecutorApplicationTests.testHiveConnection4(ExecutorApplicationTests.java:239)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
Caused by: org.apache.hive.org.apache.thrift.transport.TTransportException: Invalid status 72
	at org.apache.hive.org.apache.thrift.transport.TSaslTransport.sendAndThrowMessage(TSaslTransport.java:232)
	at org.apache.hive.org.apache.thrift.transport.TSaslTransport.receiveSaslMessage(TSaslTransport.java:184)
	at org.apache.hive.org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:277)
	at org.apache.hive.org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37)
	at org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:51)
	at org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport$1.run(TUGIAssumingTransport.java:48)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730)
	at org.apache.hadoop.hive.metastore.security.TUGIAssumingTransport.open(TUGIAssumingTransport.java:48)
	at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:420)
	at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:301)

原因及解决办法:

我这边的原因是因为,hive连接采用了HTTP的形式,但HTTP Mode形式的url连接串需要添加transportMode=http;httpPath=<http_endpoint>这两个参数,

  • <http_endpoint> 是相应的HTTP端的配置在hive-site.xml,默认值是cliservice
  • HTTP传输模式的端口默认是10001

解决:

修改原url连接,变为:

String url = "jdbc:hive2://poc.namenode.tebon.com:10001/;principal=hive/_HOST@TEBON.COM;httpPath=cliservice;transportMode=http"

以上是我个人配到的问题踩的坑,提供给大家参考

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值