摘要:Windows下使用Python3连接Hive存在很多坑,通过踩坑后,最终成功连接了Hive,现在对踩坑的经验做一下记录,以便后续重新踩坑。
第一次使用的连接方式为pyhive的形式,但安装完毕之后总是失败,有人说需要更改对应的Hive配置,但作为一个运维人员来说,不到万不得已不会去修改生产环境的一些配置(hive.server2.authentication改为NOSASL,然后在hive.connection()的参数中也加入auth='NOSASL'),也有人说sasl不支持windows版本,基于这两点,在Windows下建议使用impyla方式连接Hive。
Python连接Hive的方式有:
pip install bit_array
pip install thrift
pip install thriftpy
pip install pure_sasl
pip install --no-deps thrift-sasl==0.2.1
pip install impyla
# -*-coding:utf-8 -*-
from impala.dbapi import connect
conn = connect(host='ip', port=port, database='default', user='user_name', password='password', auth_mechanism="PLAIN")
cur = conn.cursor()
cur.execute('show tables')
print(cur.fetchall())
1.重点不要安装sasl,否则会提示报错
卸载方式:pip uninstall sasl
2.在安装过程中,如果出现包安装失败的情况,可以下载whl包进行安装,下载链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/
安装方式:pip install 包的绝对路径
3.如果在安装过程中,出现任何包安装失败的问题,可以先将之前所有安装过的包统统卸载,再按顺序依次安装一次
4.Linux建议采用pyhive形式连接
sudo yum install cyrus-sasl-devel
sudo yum install gcc-c++
pip3 install sasl
pip3 install thrift
pip3 install thrift-sasl
pip3 install PyHive
这个问题的原因是thrift-sasl版本过高导致的,将其换成0.2.1的版本即可
pip install thrift-sasl==0.2.1
这是由于auth_mechanism设置的问题导致的,加上或将其改为auth_mechanism="PLAIN"即可
修改 thrift-sasl init.py,在第94行之前加上以下语句即可:
if (type(body) is str):
body = body.encode()
这是Windows下采用pyhive连接方式提出的错误,正如前言所述,可能需要修改对应的配置文件,也可能sasl根本就不支持Windows,建议改用impyla形式连接
修改thriftpy包下\parser\parser.py"中第488行代码,将"if url_scheme == '':" 修改为"if len(url_scheme) <=1:"即可
收藏