Python:Hive:impyla:安装方法

2,686 阅读2分钟

零、前情提要

日常工作中因为本地使用的是window10系统, 而crontab使用的是linux系统, 想使用Python3搭建impyla链接公司Hive库, 但一直出现安装问题, 因此在这里记录下相关安装过程已被之后使用.

Python连接Hive的方法有:
* ThriftHive  ## Thrift是Hive连接外部的一个组件
* pyhs2 driver ## 需开启hiveserver2服务
* PyHive ## Linux推荐
* impyla ## Windows推荐

一、安装方法

曾经由此安装时使用的各最新版第三方库导致安装失败, 因此不建议所有库都使用最新第三方库.

1.1 Windows10

impyla安装过程

安装依赖
### 安装依赖
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bit_array==0.1.0 ## -i 使用清华源进行下载, 国内还是清华源会快很多.
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple thrift==0.9.3
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple thriftpy==0.3.9
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pure_sasl==0.6.1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-deps thrift-sasl==0.2.1
安装impyla
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple impyla==0.14.1
连接Hive
from impala.dbapi import connect
conn = connect(host=host, port=port, database=database, user=user, password=password, auth_mechanism="PLAIN") ## auth_mechanism是Hive的配置设置 
cur = conn.cursor()
cur.execute('show tables')
print(cur.fetchall())

注意事项

  1. 重点不要安装sasl, 否则会提示报错

卸载方法: pip uninstall sasl

  1. 在安装过程中, 如果出现包安装失败的情况, 可以下载whl包进行安装, 下载链接:www.lfd.uci.edu/~gohlke/pyt…

安装方式: pip install 绝对地址.whl

  1. 如果在安装过程中, 出现任何包安装失败的问题, 可以先将之前所有安装过的包统统卸载, 再按顺序依次安装一遍.

  2. 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

问题集锦

  1. impyla (0.14.0) ERROR - 'TSocket' object has no attribute 'isOpen'

这个问题的原因是thrift-sasl版本过高导致的,将其换成0.2.1的版本即可 pip install thrift-sasl==0.2.1

  1. thriftpy2.protocol.exc.TProtocolException: TProtocolException(type=4)

这是由于auth_mechanism设置的问题导致的,加上或将其改为auth_mechanism="PLAIN"即可

  1. TypeError: can’t concat str to bytes

修改thrift-sasl的源代码文件:thrift-sasl init.py,在第94行之前加上以下语句即可:

if (type(body) is str):
    body = body.encode()
  1. thrift.transport.TTransport.TTransportException: Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'

这是Windows下采用pyhive连接方式提出的错误,正如前言所述,可能需要修改对应的配置文件,也可能sasl根本就不支持Windows,建议改用impyla形式连接

  1. thriftpy.parser.exc.ThriftParserError: ThriftPy does not support generating module with path in protocol 'c'

修改thriftpy包下\parser\parser.py中第488行代码,将if url_scheme == '': 修改为if len(url_scheme) <=1:即可

1.2 Linux

Linux包主要安装impyla相对容易, 但是需要安装几个依赖环境.

安装系统依赖

apt-get install -y --no-install-recommends gcc libsasl2-dev python3.x-dev ##其中python3.x-dev需要看在Linux上运行相关程序的具体python版本

安装impyla

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bit_array==0.1.0
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple thrift==0.9.3
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple thriftpy==0.3.9
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pure_sasl==0.6.1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-deps thrift-sasl==0.2.1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple impyla==0.14.1