python連接hive (安裝impyla)的采坑之旅


本人WIN10系統,想用python連接hive,在網上查閱了資料,普通的hiveserver太老舊了,線程調用速度慢且不穩定,找到impyla,決定嘗試安裝。安裝記錄如下,有不全面的地方,但希望對以后的安裝者有所幫助。

impyla是專門針對python連接impyla的數據庫,可以連接后台hive以及kudu,查詢速度比之前常用的hiveserver快很多,而且連接便捷。
在此記錄安裝impyla的各種坑。
 
1、pip install six
2、pip install bit_array
3、pip install thriftpy  ##注意: thrift (on Python 2.x) or thriftpy (on Python 3.x)
然后安裝依賴
pip install thrift_sasl
pip install sasl
 
此時報錯:
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
 
此錯誤需要安裝Visual Studio
安裝地址:
https://pan.baidu.com/s/1WaBxFghTll6Zofz1DGOZBg
原文地址:
原文地址 https://blog.csdn.net/qq_38316655/article/details/79417709

安裝完之后需要打開visual Studio試運行一下
然后在cmd下繼續安裝

又報錯:
error: command’C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe’ failed with exit status 2
安裝的sasl版本不適用問題,我是python3.5 WIN10系統64,需要的sasl版本是0.2.1
重新下載sasl,sasl-0.2.1-cp35-cp35m-win_amd64.whl
重新安裝:pip install sasl-0.2.1-cp35-cp35m-win_amd64.whl
 
如果報錯:'TSocket' object has no attribute 'isOpen'
則是thrift-sasl的版本太高了(0.3.0),故將thrift-sasl的版本降級到0.2.1
pip install thrift-sasl==0.2.1
 
此時安裝impyla
pip install impyla
可以安裝成功了,測試連接hive
 
from impala.dbapi import connect
conn = connect(host='*',port = 10000,auth_mechanism='PLAIN')
cur=conn.cursor()
cur.execute('SHOW databases;')
print(cur.fetchall())
cur.close()
conn.close()

  

報錯:ThriftPy does not support generating module with path in protocol 'c'
主要是源碼在解析url的時候出現錯誤,解決方法如下:
修改windows端中的parser 代碼,筆者代碼位置如下: C:\ProgramData\Anaconda2\Lib\site-packages\thriftpy\parser
修改其中的488行為如下情況:
#if url_scheme == '':
if len(url_scheme) <= 1:
然后重新運行即可。
 
報錯:thriftpy.transport.TTransportException: TTransportException(message="Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'", type=1)
其中,authMechanism的值取決於hive-site.xml里的配置
<name>hive.server2.authentication</name>
<value>NOSASL</value>
默認為NONE,另外還可以為’NOSASL’, ‘PLAIN’, ‘KERBEROS’, ‘LDAP’. 
了解導auth_mechanism 這個參數的取值可以是:’NOSASL’, ‘PLAIN’, ‘KERBEROS’, ‘LDAP’.

需要查看hive的配置文件hive-site.xml里面的取值,於是找到對應文件:
取值為NONE,修改測試里的參數:
from impala.dbapi import connect
conn = connect(host='*',port = 10000,auth_mechanism='NONE')
cur=conn.cursor()
cur.execute('SHOW databases;')
print(cur.fetchall())
cur.close()
conn.close()

  

但是依然報錯:
impala.error.NotSupportedError: Unsupported authentication mechanism: NONE

此錯誤在網上查了很多,都沒有詳細的說法,它說得是身份有限制,猜想會不會是后台的有權限限制,所以找到了后台開發,得到答案確實是有限制的!
因為此處連接的是后台的impala,但是對於impala后台鏈接需要身份驗證以及權限說明,所以導致無法鏈接,於是改變了IP地址:
 
 
對我安裝很有幫助的文檔

https://blog.csdn.net/Xiblade/article/details/82318294

 


免責聲明!

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



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