python 连接 impala

黎东
L、先森
2019-01-29 0 3270

要想使用python连接hive,首先得下载以下几个包

pip3 install pure-sasl
pip3 install thrift
pip3 install thrift-sasl
pip3 install cython
pip3 install impyla

安装出错

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Collecting impyla
  Using cached https://files.pythonhosted.org/packages/fb/e4/f2a71cb427cf5eb9d0dec0026220bbfe3efafe67b676e2b96ea5a5d3bff2/impyla-0.15.0.tar.gz
    ERROR: Complete output from command python setup.py egg_info:
    ERROR: 
    The required version of setuptools (>=3.4.4) is not available,
    and can't be installed while this script is running. Please
    install a more recent version first, using
    'easy_install -U setuptools'.
    
    (Currently using setuptools 0.9.8 (/usr/lib/python2.7/site-packages))
    ----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 2 in /tmp/pip-install-CH6vNu/impyla/

更新 setuptools

pip install --upgrade setuptools


下面进行测试,测试代码如下

from impala.dbapi import connect
conn = connect(host='192.168.0.10', port=21050)
cur = conn.cursor()
cur.execute('select name as num from user ;')
data_list=cur.fetchall()
for data in data_list:
	print (data)

如果报一下错误

Traceback (most recent call last):
  File "updateImpala.py", line 65, in <module>
    main(sys.argv[1:])
  File "updateImpala.py", line 48, in main
    cur = conn.cursor()
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 125, in cursor
    session = self.service.open_session(user, configuration)
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 1016, in open_session
    resp = self._rpc('OpenSession', req)
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 944, in _rpc
    response = self._execute(func_name, request)
  File "/Library/Python/2.7/site-packages/impala/hiveserver2.py", line 961, in _execute
    return func(request)
  File "/Library/Python/2.7/site-packages/impala/_thrift_gen/TCLIService/TCLIService.py", line 175, in OpenSession
    self.send_OpenSession(req)
  File "/Library/Python/2.7/site-packages/impala/_thrift_gen/TCLIService/TCLIService.py", line 182, in send_OpenSession
    args.write(self._oprot)
  File "/Library/Python/2.7/site-packages/impala/_thrift_gen/TCLIService/TCLIService.py", line 1250, in write
    oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
TypeError: expecting list of size 2 for struct args

使用thrift 0.9.3 版本

sudo pip install thrift==0.9.3

查看安装组件的版本

pip list


大数据