windows 平台 python3 使用 impyla 连接 hive 问题汇总

用户头像
誓约·追光者
关注
发布于: 2020 年 09 月 16 日

①背景



windows+python3+连接已有hive集群且已经开启hiveserver2 服务



linux下用pyhive可能会方便一些,windows下pyhive需要在集群和连接代码中同时指定auth_mechanism参数,会影响到集群里的hue服务(我司使用的是CDH集群),因此建议在windows下使用impyla来连接



②正确安装方式



1.pip install pure-sasl



2.pip install thrift_sasl==0.2.1 --no-deps



3.pip install thrift==0.9.3



4.pip install thriftpy



5.pip install impyla



6.把\lib\site-packages\thrift_sasl\__init__.py第94行



...
header = struct.pack(">BI", status, len(body))
self._trans.write(header + body)
...



改为



...
header = struct.pack(">BI", status, len(body))
if(type(body) is str):
body = body.encode()
self._trans.write(header + body)
...



7.from impala.dbapi import connect



8.conn = connect(host='****',port=10000,auth_mechanism='PLAIN',user='root',database='default')



注意,这一步里,大多数人都加了password='',但我加这个的话会报错thriftpy.transport.TTransportException: TTransportException(type=1, message="Bad status: 3 (b'Error validating the login')")。如果你不加password报错,那还是加上吧



③各种常见坑的原因和解决方法



1.ThriftParserError: ThriftPy does not support generating module with path in protocol ‘c’



解决:把 \lib\site-packages\thriftpy\parser\parser.py第488行



...
#if url_scheme == '':
...



改为



...
if len(url_scheme) <= 1:
...



2.'TSocket' object has no attribute 'isOpen'



解决:thrift-sasl的版本太高了(0.3.0),将thrift-sasl的版本降级到0.2.1



3.TTransportException: Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2



解决:在conn中增加auth_mechanism参数,其值默认为'PLAIN',如果不行,可能是集群设置了这个参数(一般应该没设置),需要去集群的hive-site.xml中查看



或者是sasl未卸载导致,sasl和pure-sasl有冲突,卸载sasl可能能修复此问题



4.No protocol version header'或者TProtocolException: TProtocolException(type=4)



解决:在conn中增加auth_mechanism参数,其值默认为'PLAIN'



5.value cannot be empty



解决:conn中port参数设为10000.虽然集群里impala端口默认21050,用这个端口连接也不会报错,但连接这个端口是取不到hive数据的



④可行的版本



1.pure_sasl0.5.1



thrift_sasl0.2.1



thrift0.9.3



bitarray0.8.3



thriftpy0.3.9



impyla0.14.1



2.pure_sasl0.6.2



thrift_sasl0.2.1



thrift0.9.3



bitarray1.0.1



thriftpy0.3.9



impyla0.16.2



重要帮助参考文章:https://blog.csdn.net/Xiblade/article/details/82318294



以上是我遇到的问题,还有其他未能顾及到的问题请提问



发布于: 2020 年 09 月 16 日 阅读数: 43
用户头像

誓约·追光者

关注

还未添加个人签名 2020.08.11 加入

还未添加个人简介

评论

发布
暂无评论
windows平台python3使用impyla连接hive问题汇总