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
thrift
pip install sasl
此时报错:
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": landinghub.visualstudio/visual-cpp-build-tools
此错误需要安装Visual Studio
安装地址:
pan.baidu/s/1WaBxFghTll6Zofz1DGOZBg
原⽂地址:
原⽂地址 blog.csdn/qq_38316655/article/details/79417709
安装完之后需要打开visual Studio试运⾏⼀下
然后在cmd下继续安装
⼜报错:
error: command’C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\’ 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()
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:
然后重新运⾏即可。
报错:ansport.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的值取决于l⾥的配置
<name>hive.server2.authentication</name>
<value>NOSASL</value>
默认为NONE,另外还可以为’NOSASL’, ‘PLAIN’, ‘KERBEROS’, ‘LDAP’.
了解导auth_mechanism 这个参数的取值可以是:’NOSASL’, ‘PLAIN’, ‘KERBEROS’, ‘LDAP’.
需要查看hive的配置⽂件l⾥⾯的取值,于是到对应⽂件:
取值为NONE,修改测试⾥的参数:
from impala.dbapi import connect
conn = connect(host='*',port = 10000,auth_mechanism='NONE')
cur=conn.cursor()
print(cur.fetchall())
cur.close()
conn.close()
但是依然报错:
此错误在⽹上查了很多,都没有详细的说法,它说得是⾝份有限制,猜想会不会是后台的有权限限制,所以到了后台开发,得到答案确实是有限制的!
因为此处连接的是后台的impala,但是对于impala后台链接需要⾝份验证以及权限说明,所以导致⽆法链接,于是改变了IP地址:
对我安装很有帮助的⽂档

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。