日常工作中因為本地使用的是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())
注意事項
- 重點不要安裝
sasl , 否則會提示報錯
卸載方法: pip uninstall sasl
- 在安裝過程中, 如果出現包安裝失敗的情況, 可以下載
whl 包進行安裝
安裝方式: pip install 絕對地址.whl
- 如果在安裝過程中, 出現任何包安裝失敗的問題, 可以先將之前所有安裝過的包統統卸載, 再按順序依次安裝一遍.
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
問題集錦
- impyla (0.14.0) ERROR - 'TSocket' object has no attribute 'isOpen'
這個問題的原因是thrift-sasl版本過高導致的,將其換成0.2.1的版本即可
pip install thrift-sasl==0.2.1
- thriftpy2.protocol.exc.TProtocolException: TProtocolException(type=4)
這是由于auth_mechanism 設置的問題導致的,加上或將其改為auth_mechanism="PLAIN" 即可
- TypeError: can’t concat str to bytes
修改thrift-sasl 的源代碼文件:thrift-sasl init.py ,在第94行之前加上以下語句即可:
if (type(body) is str):
body = body.encode()
- 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 形式連接
- 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
|