使用带Kerberos身份验证的impyla客户端连接到Impala

时间:2016-01-24 15:27:04

标签: python hadoop kerberos cloudera

我使用的是W8机器,我使用Python( Anaconda 分发版)连接到 Hadoop 群集中的 Impala Impyla 包。我们的hadoop集群通过 Kerberos 进行保护。我已按照API REFERENCE如何配置连接。

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

我们正在使用带有SASL的Kerberos GSSAPI

auth_mechanism='GSSAPI'

我已经设法为WIN8安装了python-sasl库,但我仍遇到此错误。

Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found (code THRIFTTRANSPORT): TTransportException('Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found',)

我想知道我是否仍然缺少某些依赖项。

7 个答案:

答案 0 :(得分:2)

对我来说,安装此软件包修复它:libsasl2-modules-gssapi-mit

答案 1 :(得分:1)

对我来说,以下连接参数有效。我没有在python中安装任何其他软件包。

connect(host="your_host", port=21050, auth_mechanism='GSSAPI', timeout=100000, use_ssl=False, ca_cert=None, ldap_user=None, ldap_password=None, kerberos_service_name='impala')

答案 2 :(得分:1)

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

使用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) 

答案 3 :(得分:0)

安装kerberos Python包,它将解决您的问题。

答案 4 :(得分:0)

要使用python连接Impala,您可以按照以下步骤操作,

  1. 安装用于Impala的Coludera ODBC驱动程序。
  2. 使用64位ODBC驱动程序创建DSN,放入您的服务器详细信息,以下是相同的示例屏幕截图 enter image description here

    1. 使用以下代码段进行连接

      导入pyodbc

      使用pyodbc.connect(“ DSN = impala_con”,autocommit = True)作为conn: ... df = pd.read_sql(“”,conn)

答案 5 :(得分:0)

尝试此操作以获取 kerberized 集群的表。就我而言,是 CDH-5.14.2-1

在运行此代码之前,请确保您具有有效的票证。

  

具有以下软件包的python 2.7

thrift-0.9.3
thriftpy-0.3.8
thrift_sasl-0.3.0
impyla==0.14.2.2
  

工作代码

from impala.dbapi import connect
from impala.util import as_pandas

# 21000 is impala daemon port.
conn = connect(host='yourHost', port=21050, auth_mechanism='GSSAPI') 

cursor = conn.cursor()
cursor.execute("SHOW TABLES")
# After running .execute(), Impala will store the result sets on the server
# until it is fetched. Use the method .fetchall() to pull the entire result
# set over the network (you should only do it if you know dataset is small)
tables = cursor.fetchall()

print("Displaying list of tables")
# the result is a list of tuples
for t in tables:
    # we know that each row in SHOW TABLES result
    # should only contains one table name
    print(t[0])
    # exit() enable for only one table

print("eol >>>")

答案 6 :(得分:0)

python cannot connect hiveserver2

确保您安装了cyrus-sasl-devel和cyrus-sasl-gssapi