Linux离线环境安装Pyhive包及通用方式

1、Linux离线安装GCC编译环境php

安装以前要查看离线环境的Linux版本,由于下载文档须要Linux的版本对应html

1 uname -a显示所有信息

显示版本号,该机版本为centos 6.6,属于6系的Linux系统python

一、 手动对RPM包进行安装(方法1)linux

RPM是Red-Hat Package Manager(RPM软件包管理器)的缩写,其原始设计理念是开放式的,如今包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,能够算是公认的行业标准了。git

下载GCC全部须要的依赖包,逐个安装,从第三方开源软件管理库能够下载到:github

https://pkgs.org/(推荐包搜索)sql

http://www.rpmfind.net/linux/rpm2html/search.php数据库

根据安装顺序下载所需的包,而且按照顺序进行安装。windows

1 Rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm             #ppl(libppl.so.7、libppl_c.so.2)
2 rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm       #cloog-ppl
3 rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm              #libmpcfr.so.1
4 rpm -ivh cpp-4.4.7-17.el6.x86_64.rpm              #cpp
5 rpm -ivh kernel-headers-2.6.32-642.el6.x86_64.rpm      #kernel-headers
6 rpm -ivh glibc-headers-2.12-1.192.el6.x86_64.rpm       #glibc-headers
7 rpm -ivh glibc-devel-2.12-1.192.el6.x86_64.rpm         #glibc-devel
8 rpm -ivhlibgomp-4.4.7-17.el6.x86_64.rpm             #libgomp(libgomp、libgomp.so.1)
9 rpm -ivh gcc-4.4.7-17.el6.x86_64.rpm                #gcc

至此安装成功,用gcc -v命令能够检验,若是版本号提示正确,那么安装成功。centos

二、 挂载光盘镜像进行安装(方法2)

将centos的镜像进行挂载,不过须要centos的yum方法支持,此种方法不须要考虑包和动态库之间的依赖,yum包管理器会自动分析本机的依赖。(依赖是一个难度不大,可是很是琐碎的事情)

 1 #设置光驱挂载点 
 2 mkdir -p /Application/cdrom 
 3 #挂载光驱 
 4 mount /dev/cdrom /Application/cdrom  这个是挂载后文件地址,你也能够本身选着路径
 5 #备份原yum源 
 6 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
 7 #把光驱设为yum源 
 8 echo "[base]" > /etc/yum.repos.d/CentOS-Base.repo 
 9 echo "name=CentOS-$releasever - Base" >> /etc/yum.repos.d/CentOS-Base.repo 
10 echo "baseurl=file:///Application/cdrom/" >> /etc/yum.repos.d/CentOS-Base.repo 
11 echo "gpgcheck=0" >> /etc/yum.repos.d/CentOS-Base.repo 
12 #安装GCC 
13 yum install gcc -y 
14 #恢复原yum源 
15 cp –f /etc/yum.repos.d/CentOS-Base.repo.bak /etc/yum.repos.d/CentOS-Base.repo

至此安装成功,用gcc -v命令能够检验,若是版本号提示正确,那么安装成功。

三、 离线更新或者替换GCC版本

编译GCC源码进行安装,必须已经安装了可用的GCC,主要用于更新GCC版本

http://www.javashuo.com/article/p-hfaialbp-nv.html

不然就要根据rpm二进制包进行GCC安装,可是要解决的lib包依赖问题很是复杂:

四、 问题:

根目录下的/lib64缺乏libc-2.12.so文件解决方案,预加载库而后解决动态链接问题

https://blog.csdn.net/quantum7/article/details/80064002

若是你是在root用户下进行的操做,那么你是幸运的,毕竟/lib(lib64)下的属组属主都是root,因此尽管libc.so.6丢失,mv、cp、ln等命令都仍是能够正常使用的,普通用户误操做libc.so.6的解决办法以下,只能经过系统急救盘来进行

https://blog.csdn.net/Scirhh/article/details/84937858

 

2、安装Pyhive包

Pyhive依赖:sasl,thrift,thrift-sasl, PyHive

一、 安装Pyhive依赖-sasl

第一种方法:

经过GCC编译python源文件进行安装,python源代码官方地址:https://pypi.org/

不少python的包是有编译好的文件,可是sasl包并无,必须根据具体环境进行编译

GCC安装好之后,进入sasl源码包,用python setup.py install指令安装sasl源码包文件。

第二种方法:

经过conda/pip进行离线安装sasl包,在本地经过conda配置好相同的环境版本,经过本文中介绍的离线安装方法安装sasl包

 

问题:

在源代码编译的过程当中,可能会出现sasl.h头文件丢失问题,缘由是sasl的源码已经许久没有维护了,代码结构与现有的代码结构不同,采用新版工具包,安装cyrus-sasl包解决,官方地址为国外地址,并不可用,因此用第三方地址,下载而且按照官网提示的安装方法进行编译安装便可,源码见官网地址:

http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cyrus-sasl.html

按照官方网站的编译流程安装完该组件之后,就能够进行Pyhive的安装了

若是还存在sasl.h头文件问题,能够经过pip离线安装libsasl2-dev包

能够参考如下文档:

https://blog.csdn.net/wulantian/article/details/74330590

二、 安装thrift、thrift-sasl

采用pip/conda下载离线安装包的方式,将离线安装包传到离线环境,经过pip/conda命令进行安装,直接经过二进制文件进行安装能够解决离线环境编译缺乏各类开发用的库等问题,自己生产环境不适合作开发环境

三、 安装Pyhive包

采用pip/conda方式安装pyhive包

而后按照教程里面的代码进行测试便可,教程地址以下:

https://github.com/dropbox/PyHive

四、 了解hive的配置及工做机制

Hive至关于hdfs分布式系统,只是一个不一样于普通的sql的查询工具hql,指令都是同样的,因此采用hive查询数据库,在python里面只须要进行操做就好了,须要有数据库地址

http://www.javashuo.com/article/p-eksivokj-bd.html

 

2、离线安装包的几种方式

python包离线安装的几种方法(通过摸索,推荐用这个方法解决离线环境的依赖问题)

尽可能少的采用源码编译的形式进行安装,很是容易出问题,由于生产环境和开发环境不同,库的差别性很是大,因此编译起来问题比较多,建议在本地采用一样的配置(通常采用conda进行管理便可)将源码包进行编译,生成二进制文件,再上传到服务器进行安装:

一、经过pip安装

经过pip进行离线安装,此方法能够直接分析依赖下载wheel,比较方便,须要本地环境与服务器环境相同

第一种方法:

经过批量安装依赖,首先,在项目中分析出全部依赖的库

1 pip freeze > requirements.txt
2 将全部包下载到DIR这个目录中
3 pip download -d DIR -r requirements.txt
4 pip wheel -w DIR -r requirements.txt

问题:

切记,不要在 windows 下载包,而后放到 Linux 上进行安装,这样八成装不上

一、 这两条命令的区别在于wheel 方式下载会将下载的包放入wheel 缓存,但缺点是wheel 不能够下载源码包

二、 download 命令会查看wheel缓存,而后再去PyPI下载库,但download命令下载的包不会进入wheel缓存,download 的优势是能够下载源码包

三、 须要注意,使用wheel 方式安装可能会报错,由于有些包是源码包,不能被打包成wheel 格式

四、 download 方法下载的包,不会对依赖性进行检查,这意味着,若是下载 Flask-PyMongo 这个包,只会下载该包,而不会下载 pymongo,经试验发现,download 适合补充wheel不可下载的包,二者搭配使用,才能将requirements文件的库完整的下载。

将下载的wheel文件和requirement.txt文件放到离线环境中用教程中的命令进行安装

pip install --no-index --find-links=DIR -r requirements.txt

到此包就安装好了。

第二种方法:

若是在批量安装过程当中,发现离线环境某些包缺乏依赖,是由于在处处本地requirements.txt的时候只是导出了新装的依赖名称,可能最基本的依赖两个环境不同,这时候就要单个依赖进行下载,而后到离线环境进行安装,单个文件的下载安装方式跟批量下载同样。

先根据包名称下载

1 pip wheel -w DIR pandas(包名称)

而后经过pip指令安装

1 pip install path/pandas(下载包的位置)

到此单个pip包就安装完了

二、经过conda安装

经过conda安装的方法与pip进行安装的方法比较相似,conda安装包的时候都会将包下载到缓存,默认的缓存地址是anaconda/pkgs/下面的tar.bz2格式的包

首先要在本地安装好所需的包,所需的包自动会存在缓存位置

 

而后到缓存位置找到所需的包,将须要的依赖包拷贝转移到离线环境中,随便放在哪一个位置都行,最好是拷贝到离线环境的相同conda的缓存位置

 

再运行:conda install --use-local path/file.gz(若是将包放在了相同位置,直接conda install XX就行,由于conda install 命令最默认搜索缓存位置,并分析依赖进行安装,此种方式比较高效)

其中path为放包的地方,最好放到conda默认的目录里面,由于conda即便在线安装依赖也是会先去搜寻离线缓存,而后才会去在线查找

 

安装完成之后去调用就能够了。