要做一個通過調用python來實現對hive server2 的連接。在網上搜索了很多資料,有些說的hive sever的,但是由於認證方式發生改變,行不通。
最后,找到了權威的說明(PS: 還是應該先看官方材料):
https://cwiki.apache.org/confluence/display/Hive/Setting+up+HiveServer2#SettingUpHiveServer2-PythonClientDriver
所以在這里結合自己的使用,主要還是給大家翻譯和引用一下:
A Python client driver for HiveServer2 is available at https://github.com/BradRuderman/pyhs2 (thanks, Brad). It includes all the required packages such as SASL and Thrift wrappers.
The driver has been certified for use with Python 2.6 and newer.
To use the pyhs2 driver:
pip install pyhs2
通過Python 連接HiveServer2的類可以從github上下載,下載地址:https://github.com/BradRuderman/pyhs2 。其中包含了pyhs2類中使用到的其他的類,比如SASL 和Thrift wrappers。可以手動下載后放在目錄下,添加到sys.path中。
隨后給出來一個simple example:
1 import pyhs2 2 with pyhs2.connect(host='localhost', 3 port=10000, 4 authMechanism="PLAIN", 5 user='root', 6 password='test', 7 database='default') as conn: 8 with conn.cursor() as cur: 9 #Show databases 10 print cur.getDatabases() 11 #Execute query 12 cur.execute("select * from table") 13 #Return column info from query 14 print cur.getSchema() 15 16 #Fetch table results 17 for i in cur.fetch(): 18 print i
調試的過程中基本沒有遇到什么大問題:
1. 因以前的sys.path路徑下有老的pyhs2的類庫,會提示說缺少sasl的類庫,將舊的pyhs2打包備份后,會自動指向新的pyhs2的類庫,這個問題就解決了。
2. 拋出異常的地方,我使用 try... except Thrift.TException, tx:的方式,能正常地拋出sql的異常。
如果有疑問,歡迎回復討論。
最后提供了一個郵件列表,供技術討論:
You can discuss this driver on the user@hive.apache.org mailing list.