【问题标题】:Python Impyla fails after Kerberos install安装 Kerberos 后 Python Impyla 失败
【发布时间】:2023-11-17 04:25:01
【问题描述】:

我在 W7 机器上,使用 Python(Anaconda 发行版)通过 Impyla 包连接到我们 Hadoop 集群中的 Impala。 我的公司最近添加了 Kerberos,这最终破坏了我已有的东西。

在 Kerberos 之前:

from impala.dbapi import connect
conn = connect( host='localhost', port=21050)
cur = conn.cursor()

cur.execute('SHOW TABLES')
cur.fetchall()

在 Kerberos 之后

from impala.dbapi import connect
conn = connect( host='localhost', port=21050, use_kerberos=True,
               kerberos_service_name='impala/myservername')

Traceback (most recent call last):

  File "<ipython-input-13-068c7348729f>", line 2, in <module>
    kerberos_service_name='impala/myservername')

  File "C:\Users\x\AppData\Local\Continuum\Anaconda\lib\site-packages\impala\dbapi\__init__.py", line 47, in connect
    ldap_password, use_kerberos, kerberos_service_name)

  File "C:\Users\x\AppData\Local\Continuum\Anaconda\lib\site-packages\impala\_rpc\hiveserver2.py", line 193, in connect_to_impala
    use_kerberos, kerberos_service_name)

  File "C:\Users\x\AppData\Local\Continuum\Anaconda\lib\site-packages\impala\_rpc\hiveserver2.py", line 166, in _get_transport
    import sasl

ImportError: No module named sasl

我尝试从 CMD 安装 sasl:

>easy_install sasl
Searching for sasl
Reading https://pypi.python.org/simple/sasl/
Best match: sasl 0.1.3
Downloading https://pypi.python.org/packages/source/s/sasl/sasl-0.1.3.tar.gz#md5
=6db4ca3d4fb699cf126a6e6f2f516d8f
Processing sasl-0.1.3.tar.gz
Writing c:\users\x\appdata\local\temp\easy_install-zfqesn\sasl-0.1.3\setup
.cfg
Running sasl-0.1.3\setup.py -q bdist_egg --dist-dir c:\users\x\appdata\loc
al\temp\easy_install-zfqesn\sasl-0.1.3\egg-dist-tmp-cl0non
sasl/saslwrapper.cpp:21:23: fatal error: sasl/sasl.h: No such file or directory
compilation terminated.
error: Setup script exited with error: command 'C:\\Users\\x\\AppData\\Loc
al\\Continuum\\Anaconda\\Scripts\\gcc.bat' failed with exit status 1

【问题讨论】:

    标签: python-2.7 kerberos anaconda impala


    【解决方案1】:

    我看到您正在运行 Windows。你是在运行 cygwin 还是其他 python?

    你试过了吗:

    1. 如果使用 Cygwin,您是否尝试过安装 libsasl2-devel ?

    2. 像 Cloudera 一样从 GIT 存储库安装 python-sasl 似乎是他们 jenkins environment 的一部分?

      pip install git+https://github.com/laserson/python-sasl.git@cython

    应该施展魔法。

    顺便说一句,您使用的代码已被弃用(根据当前的 GitHub master)。

    使用

    from impala.dbapi import connect
    conn = connect( host='localhost', port=21050, auth_mechanism='GSSAPI',
                   kerberos_service_name='impala')
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但我通过安装所需库的正确版本来解决它。

      使用pip安装下面的python库:

      six==1.12.0
      bit_array==0.1.0
      thrift==0.9.3
      thrift_sasl==0.2.1
      sasl==0.2.1
      impyla==0.13.8
      

      以下代码适用于python 版本2.73.4

      import ssl
      from impala.dbapi import connect
      import os
      os.system("kinit")
      conn = connect(host='hostname.io',
                    port=21050,
                    use_ssl=True,
                    database='default',
                    user='urusername',
                    kerberos_service_name='impala',
                    auth_mechanism = 'GSSAPI')
      cur = conn.cursor()
      cur.execute('SHOW DATABASES;')
      result=cur.fetchall()
      for data in result:
          print (data)
      

      【讨论】: