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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM