Java使用JDBC连接Hive
最近一段时间,处理过一个问题,那就是hive jdbc的连接问题,其实也不是大问题,就是url写的不对,导致无法连接。问题在于HiveServer2增加了别的安全验证,导致正常的情况下,传递的参数无法使用,hive连接返回用户为空的错误,具体错误不再详谈,今天就说说jdbc的url书写问题。
正常情况下的url:
jdbc:hive2://node1:10000/default
这种情况下,都是默认的,没有权限限制。从这个示例而已看出,URL的基本格式为:
jdbc:hive2://Host:Port[/Schema];Property1=Value;Property2=Value;…
例如,使用用户名和密码连接的URL为:
jdbc:hive2://localhost:10000;AuthMech=3;UID=UserName;PWD=Password
其中,UID默认为hive,AuthMech默认为2。
hive jdbc连接安全机制也分集中情况,分别为无权限、Kerberos、用户名与用户名和密码,安全机制属性为AuthMech,例如:
jdbc:hive2://localhost:10000;AuthMech=0
jdbc:hive2://localhost:10000;AuthMech=1;KrbRealm=EXAMPLE.COM;KrbHostFQDN=hs2.example.com;KrbServiceName=hive
jdbc:hive2://localhost:10000;AuthMech=2;UID=hs2
jdbc:hive2://localhost:10000;AuthMech=3;UID=hs2;PWD=*****
jdbc:hive2://localhost:10000;AuthMech=3;SSL=1;SSLKeyStore=C:\\Users\\bsmith\\Desktop\\keystore.jks;SSLKeyStorePwd=*****;UID=hs2;PWD=*****
以上均为hive jdbc url一般模式,但是,如果需要修改执行sql时的一些hive环境变量,改如何呢?请看:
jdbc:hive2://<host>:<port>/dbName;sess_var_list?hive_conf_list#hive_var_list
这个才是jdbc url完整的格式,其中:
- sess_var_list参数列表:session参数,如principal,serviceDiscoveryMode等等;
- hive_conf_list参数列表:hive的配置参数,hive-site.xml中的配置项;
- hive_var_list参数列表:hive的变量参数;
如果要指定hive执行sql时候的相关参数,即hive-site.xml中的某些变量,就需要增加在?后面,key=value形式,多个用分号分隔。例如:
jdbc:hive2://ubuntu:11000/db2?hive.cli.conf.printheader=true;hive.exec.mode.local.auto.inputbytes.max=9999#stab=salesTable;icol=customerID jdbc:hive2://?hive.cli.conf.printheader=true;hive.exec.mode.local.auto.inputbytes.max=9999#stab=salesTable;icol=customerID jdbc:hive2://ubuntu:11000/db2;user=foo;password=bar jdbc:hive2://server:10001/db;user=foo;password=bar?hive.server2.transport.mode=http;hive.server2.thrift.http.path=hs2 jdbc:hive2://zk01:2181,zk02:2181,zk03:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
具体的解析代码在hive-jdbc中,类文件为HiveConnection.java。解析大致流程为:
// Now parse the connection uri with dummy authority URI jdbcURI = URI.create(uri.substring(URI_JDBC_PREFIX.length())); // dbname and session settings(获取第一部分参数) String sessVars = jdbcURI.getPath(); // parse hive conf settings(获取第二部分参数) String confStr = jdbcURI.getQuery(); // parse hive var settings(获取第三部分参数) String varStr = jdbcURI.getFragment();
以上就是对Hive Jdbc URL中的各个部分进行说明。
HveServer2官方说明文档:
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫