当我遇到这个报错信息,也各种进行了网上查找,但都没解决我的问题。 最后解决了问题,在这里做一下备忘记录:
首先我是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"
以上是我个人配到的问题踩的坑,提供给大家参考