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\]:22/04/10 01:13:24 \[main\]: WARN jdbc.HiveConnection: Failed to connect to hadoop102:10000 Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop102:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: fei is not allowed to impersonate fei (state=08S01,code=0) 。 引用\[2\]:Error: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.136.128:10000/mydb/: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0) 。 引用\[3\]:在安装hive的时候,启动hiveserver2后,启动beeline客户端报错如下: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop101:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0) 产生这一问题的原因是,在Hadoop集群配置文件,hdfs-site.xml和core-site.xml没有进行用户相关的配置。 解决方式如下: 1 首先需要关闭hive的元数据服务和hiveserver2,然后关闭Hadoop集群 2 vim /hadoop-3.1.3/etc/hadoop/hdfs-site.xml 添加下面配置内容 <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> 。 问题:Could not open client transport with JDBC Uri: jdbc:hive2://hadoop01:10000: java.net.ConnectException: Connection refused: connect 回答: 这个问题的原因是连接被拒绝,可能是因为Hadoop集群中的Hive服务没有启动或者配置有误。你可以尝试以下解决方式: 1. 确保Hadoop集群中的Hive服务已经启动。可以通过检查Hive的日志文件或者使用命令行工具来确认。 2. 检查连接的JDBC URI是否正确,包括主机名、端口号和数据库名称等信息。 3. 确保网络连接正常,没有被防火墙或其他安全设置阻止。 4. 检查Hadoop集群的配置文件,特别是hdfs-site.xml和core-site.xml,确保其中的用户相关配置正确设置。 如果以上方法都没有解决问题,你可以尝试重新配置Hadoop集群和Hive服务,确保配置正确无误。 #### 引用[.reference_title] - *1* [Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop102:10000: Failed to open..](https://blog.csdn.net/weixin_46005650/article/details/124071650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [hive中 beeline连接时报错](https://blog.csdn.net/qq_37668945/article/details/83627783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Hive beeline客户端启动报错Could not open client transport with JDBC Uri: jdbc:hive2://hadoop101:...](https://blog.csdn.net/qq_32118757/article/details/128686275)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值