windows 平台 python3 使用 impyla 连接 hive 问题汇总
①背景
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行
改为
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行
改为
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
以上是我遇到的问题,还有其他未能顾及到的问题请提问
版权声明: 本文为 InfoQ 作者【誓约·追光者】的原创文章。
原文链接:【http://xie.infoq.cn/article/e2903b56d37c4d44591ddc5e4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论