python连接hive (安装impyla)的采坑之旅

本人WIN10系统,想用python连接hive,在网上查阅了资料,普通的hiveserver太老旧了,线程调用速度慢且不稳定,找到impyla,决定尝试安装。安装记录如下,有不全面的地方,但希望对以后的安装者有所帮助。

impyla是专门针对python连接impyla的数据库,可以连接后台hive以及kudu,查询速度比之前常用的hiveserver快很多,而且连接便捷。

在此记录安装impyla的各种坑。  
1、pip install six

2、pip install bit_array

3、pip install thriftpy  ##注意: thrift (on Python 2.x) or thriftpy (on Python 3.x)

然后安装依赖

pip install thrift_sasl

pip install sasl  
此时报错:

error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools  
此错误需要安装Visual Studio

安装地址:

https://pan.baidu.com/s/1WaBxFghTll6Zofz1DGOZBg

原文地址:

原文地址 https://blog.csdn.net/qq_38316655/article/details/79417709

安装完之后需要打开visual Studio试运行一下

然后在cmd下继续安装

又报错:

error: command’C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe’ failed with exit status 2
安装的sasl版本不适用问题,我是python3.5 WIN10系统64,需要的sasl版本是0.2.1

重新下载sasl,sasl-0.2.1-cp35-cp35m-win_amd64.whl

重新安装:pip install sasl-0.2.1-cp35-cp35m-win_amd64.whl  
如果报错:’TSocket’ object has no attribute ‘isOpen’

则是thrift-sasl的版本太高了(0.3.0),故将thrift-sasl的版本降级到0.2.1

pip install thrift-sasl==0.2.1  
此时安装impyla

pip install impyla

可以安装成功了,测试连接hive
 

from impala.dbapi import connect
conn = connect(host='*',port = 10000,auth_mechanism='PLAIN')
cur=conn.cursor()
cur.execute('SHOW databases;')
print(cur.fetchall())
cur.close()
conn.close()

  

报错:ThriftPy does not support generating module with path in protocol ‘c’

主要是源码在解析url的时候出现错误,解决方法如下:

修改windows端中的parser 代码,笔者代码位置如下: C:\ProgramData\Anaconda2\Lib\site-packages\thriftpy\parser

修改其中的488行为如下情况:

#if url_scheme == ”:

if len(url_scheme) <= 1:

然后重新运行即可。
 
报错:thriftpy.transport.TTransportException: TTransportException(message=”Could not start SASL: b’Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2′”, type=1)
其中,authMechanism的值取决于hive-site.xml里的配置

<name>hive.server2.authentication</name>

<value>NOSASL</value>

默认为NONE,另外还可以为’NOSASL’, ‘PLAIN’, ‘KERBEROS’, ‘LDAP’. 
了解导auth_mechanism 这个参数的取值可以是:’NOSASL’, ‘PLAIN’, ‘KERBEROS’, ‘LDAP’.

需要查看hive的配置文件hive-site.xml里面的取值,于是找到对应文件:
《python连接hive (安装impyla)的采坑之旅》
取值为NONE,修改测试里的参数:

from impala.dbapi import connect
conn = connect(host='*',port = 10000,auth_mechanism='NONE')
cur=conn.cursor()
cur.execute('SHOW databases;')
print(cur.fetchall())
cur.close()
conn.close()

  

但是依然报错:

impala.error.NotSupportedError: Unsupported authentication mechanism: NONE

此错误在网上查了很多,都没有详细的说法,它说得是身份有限制,猜想会不会是后台的有权限限制,所以找到了后台开发,得到答案确实是有限制的!

因为此处连接的是后台的impala,但是对于impala后台链接需要身份验证以及权限说明,所以导致无法链接,于是改变了IP地址:
 《python连接hive (安装impyla)的采坑之旅》  
对我安装很有帮助的文档

https://blog.csdn.net/Xiblade/article/details/82318294

 

    原文作者:free_easy
    原文地址: https://www.cnblogs.com/free-easy0000/p/9638982.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞