这里选择的是使用: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数据库中各种依赖包,请大家仔细核对一下依赖包(最好是依赖包相同,也就是不多不少[我说的是相关的包],这样真的可以避免很多问题的出现)
序号 | 包名 | 版本号 | 安装命令行 |
---|---|---|---|
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 |