1. 背景:
银行的数据ETL需要使用python连接hive,提交一些SQL执行,需要安装python连接hive的包,经过调研,目前可用的包有如下三个:
- pyhs2,
- pyhive,
- impyla
其中pyhs2开发较早,目前不怎么维护了,但是由于之前的代码里面用的pyhs2,所以这次安装pyhs2,可以复用以前的代码。
因为银行的数据服务器都是与外界网络隔离的,所以只能通过之前买的一个云服务器下载好需要安装的包,然后使用u盘传入内网进行安装,本次安装过程分两个部分:
- 操作可以联网的云服务器下载包。
- 在内网安装。
2. 下载与安装
云服务器连接外网下载安装包:
#1.配置案例云yum源:
#进入配置目录
cd /etc/yum.repos.d/
#移除原来的yum源
mv CentOS-Base.repo CentOS-Base.repo.bak
#替换为阿里云 yum源
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
#重新加载yum源:
yum clean all
yum makecache
#2.在线安装缺少的包后测试成功:
yum install -y gcc gcc-c++ libffi-devel python-devel openssl-devel cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib
pip install --no-index --find-links=pyhs2_packages pyhs2
#3.yum下载需要的包
yumdownloader gcc gcc-c++ libffi-devel python-devel openssl-devel cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib
#4.pip下载需要的包
pip download pyhs2 -d pyhs2_packages -i Simple Index --trusted-host pypi.tuna.tsinghua.edu.cn
内网安装pyhs2和相关的依赖:
#安装相关的依赖
yum -y install gcc-c++
yum -y install python-devel
yum -y install cyrus-sasl-lib
yum -y install cyrus-sasl-devel
yum -y install cyrus-sasl
yum -y install cyrus-sasl-plain
yum install saslwrapper-devel
#安装python的pyhs2 包
python2.7 -m pip install --no-index --find-links=pyhs2_packages pyhs2
其中pyhs2_package文件夹内是pyhs2的安装包和依赖,内容如下
pyhs2-0.6.0.tar.gz
sasl-0.3.1.tar.gz
six-1.16.0-py2.py3-none-any.whl
thrift-0.16.0.tar.gz
3. 问题总结:
pip install --no-index --find-links=pyhs2_packages pyhs2
执行的时候报错
error:Python.h No such file or directory #include "Python.h"
查询发现原因是没有对应的python-devel,但是实际上已经安装过该包。
后来使用pip -V查询,发现这个pip 绑定的是pip3 ,python3没有python3-devel
后来使用yum -y install python3-devel ,再重新执行,执行成功。
在python3里面执行,import pyhs2 执行成功
python3 成功安装了pyhs2
然后yum -y install python-pip2 为python2.7 安装了pip :
使用python2.7 -m pip 或者pip2 ,指定python2.7的pip 执行安装pyhs2,安装成功了:
python2.7 -m pip install --no-index --find-links=pyhs2_packages pyhs2
本来一直纳闷,同样的一批包,有的机器一次性执行成功了,有的直接报错,感觉非常的郁闷。现在终于找到原因了,安装之前一定先检查一下pip 是对应的python版本
pip -V