標籤:
要做一個通過調用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 databases10 print cur.getDatabases()11 #Execute query12 cur.execute("select * from table")13 #Return column info from query14 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 [email protected] mailing list.
A Python example for HiveServer2