Python连接hive数据中遇到的各种坑

这里选择的是使用:impala+Python3.6来连接hive数据库

第一步要先在服务器开启hiveserver2 服务!!!不然会连不上的,报如下错误

Python连接hive数据中遇到的各种坑_第1张图片

开启方法很简单 到hive安装目录的bin目录下(your_path/apache-hive-1.2.2-bin/bin/hiveserver2)  输入 hiveserver2 &  回车

 

from impala.dbapi import connect
from impala.util import as_pandas
conn = connect(host='192.168.118.118', port=10000, user='root', database='default', password='root', auth_mechanism ='PLAIN')
cursor = conn.cursor()
cursor.execute('show tables')

for result in cursor.fetchall():
    print(result)

建议显示使用auth_mechanism=’PLAIN',不然会报如下错误

 

TProtocolException: TProtocolException(type=4)

如果thift-sal版本高于0.3则会报如下错误

AttributeError: 'TSocket' object has no attribute 'isOpen'

需要降版本

pip uninstall thrift-sasl
pip install thrift-sasl==0.2.1

如果有安装sasl则会报如下错误

thriftpy.transport.TTransportException: TTransportException(type=1, message="Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'")

要卸载sasl

pip uninstall SASL
pip uninstall sasl

然后可能遇到最后一个错误

TypeError: can't concat str to bytes

则按照错误提示定位到第94行,修添加如下语句

header = struct.pack(">BI", status, len(body))
#按照网上的提供的办法增加对BODY的处理
if (type(body) is str):
  body = body.encode()
# 以上两句是需要添加的
self._trans.write(header + body)
self._trans.flush()

效果如图

最后应该不会有什么问题了,学的开心呦 o(* ̄▽ ̄*)ブ

最后总结一下,连接Hadoop数据库中各种依赖包,请大家仔细核对一下依赖包(最好是依赖包相同,也就是不多不少[我说的是相关的包],这样真的可以避免很多问题的出现)

序号 包名 版本号 安装命令行
1 pure_sasl 0.5.1 pip install pure_sasl==0.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
2 thrift 0.9.3 pip install thrift==0.9.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
3 bitarray 0.8.3 pip install bitarray==0.8.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
4 thrift_sasl 0.2.1 pip install thrift_sasl==0.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
5 thriftpy 0.3.9 pip install thriftpy==0.3.9 -i https://pypi.tuna.tsinghua.edu.cn/simple
6 impyla 0.14.1 pip install impyla==0.14.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

建议按顺序安装,我这边之前有依赖包的问题,但是最终我是通过conda进行安装的。
其中在安装thriftpy、thrift_sasl、impyla报的时候报错,想到自己有conda,直接使用conda install,会自动下载依赖的包,如下所示(供没有conda环境的同学参考)

package build size
ply-3.11 py37_0 80 KB
conda-4.6.1 py37_0 1.7 MB
thriftpy-0.3.9 py37h1de35cc_2 171 KB

你可能感兴趣的:(hadoop,python,linux,python,hive,linux)