安装impyla等系列包,使用python语言连接Hive。
pip install pure-sasl
pip install thrift_sasl==0.2.1 --no-deps
pip install thrift==0.9.3
pip install impyla -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install thriftpy -i https://pypi.tuna.tsinghua.edu.cn/simple
按照上面的顺序和版本安装5个包后,连接数仓时只报一个错,解决完后就可以成功连接Hive了!
报错内容:TypeError:cant’t concat str to bytes
修改方法:根据报错前面的提示:“D:\0cxr\ProgramData\Anaconda3\lib\site-packages\thrift_sasl_init_.py”, line 94 ; 找到文件内容做修改。
将此部分
...
header = struct.pack(">BI", status, len(body))
self._trans.write(header + body)
...
修改为
header = struct.pack(">BI", status, len(body))
if(type(body) is str):
body = body.encode()
self._trans.write(header + body)
然后连接Hive就可以成功啦!
import pandas as pd
from impala.dbapi import connect
from impala.util import as_pandas
def link_hive(selector):
""" 定义连接数据库函数;连接hive数据库,取数据"""
conn = connect(host='hive地址',port=端口,database='取数的数据库',auth_mechanism='PLAIN')
cursor = conn.cursor()
cursor.execute(selector)
df = pd.read_sql(selector,conn)
cursor.close()
conn.close()
return df
PS,国内镜像地址:
http://pypi.douban.com/simple/ 豆瓣
http://mirrors.aliyun.com/pypi/simple/ 阿里
http://pypi.hustunique.com/simple/ 华中理工大学
http://pypi.sdutlinux.org/simple/ 山东理工大学
http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
https://pypi.tuna.tsinghua.edu.cn/simple 清华