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

5 篇文章 0 订阅
3 篇文章 0 订阅

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

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

开启方法很简单 到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数据库中各种依赖包,请大家仔细核对一下依赖包(最好是依赖包相同,也就是不多不少[我说的是相关的包],这样真的可以避免很多问题的出现)

序号包名版本号安装命令行
1pure_sasl0.5.1pip install pure_sasl==0.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
2thrift0.9.3pip install thrift==0.9.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
3bitarray0.8.3pip install bitarray==0.8.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
4thrift_sasl0.2.1pip install thrift_sasl==0.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
5thriftpy0.3.9pip install thriftpy==0.3.9 -i https://pypi.tuna.tsinghua.edu.cn/simple
6impyla0.14.1pip install impyla==0.14.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

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

packagebuildsize
ply-3.11py37_080 KB
conda-4.6.1py37_01.7 MB
thriftpy-0.3.9py37h1de35cc_2171 KB
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值