首先,我还读过this question (因为它看起来很简单)。
我的问题是,我还试图连接到我们的Apache系统,该系统现在由Kerberos保护。我使用了impyla模块来实现这一点。在将Kerberos安装到Hadoop系统之前,这种方法运行良好。现在我在互联网上尝试了不同的解决方案,但是我不得不承认,我以前从未与Kerberos合作过。
这是我使用的代码:
conn = connect (host = host,
port = port,
auth_mechanism='GSSAPI',
kerberos_service_name='impala')
db_cursor = conn.cursor()
db_cursor.execute ('SHOW DATABASES')
results = db_cursor.fetchall()
db_names = [print(x[0]) for x in results](主机和端口作为变量传递)
目前的错误是:“没有名为thrift_sasl的模块”。
在错误信息上使用google并不能让我找到有用的、糟糕的信息。有人说需要安装"pyKerberos“模块,但我不确定这是否解决了问题。
有东西我忘了吗?我还拥有Kerberos主体和密码,并使用"MIT Kerberos票证管理器“来管理它,但也许我也必须以某种方式提供代码中的信息?
希望有人能帮我因为我被困在这里了。:-)
发布于 2019-02-05 10:11:33
经过漫长而容易出错的道路后,我终于找到了一个解决方案。我没有使用库"impyla“,而是使用了另一种方法:安装了cloudera驱动程序,并在ODBC数据源管理员工具中配置了一个新连接。我还提供了用于身份验证的.keytab文件(以及用户名和密码等)。然后,我使用了Python库"pyodbc“,如下所示:
import pyodbc
import pandas
pyodbc.autocommit=True
conn = pyodbc.connect("DSN=NAMEOFYOURDSN", autocommit=True)
cursor = conn.cursor()
cursor.execute('SHOW DATABASES')
with pandas.option_context('display.max_rows', None, 'display.max_columns', None):
print(df)这很好,我可以开始进一步处理它。
发布于 2019-08-04 14:39:46
我遇到了同样的问题,但我通过安装所需库的正确版本来修复它。
使用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.7和3.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) 发布于 2021-11-22 11:17:14
我使用以下设置:
OS:Ubuntu focal 20.04
$ python -V
Python 3.8.10apt-get install libkrb5-dev krb5-user
impyla 0.17.0
thrift 0.11.0
thrift-sasl 0.4.3
pure-sasl 0.6.2
sasl 0.3.1
kerberos 1.3.1 我的(工作)代码:
conn = connect(host='myhost', port=21050, timeout=timeout, auth_mechanism="GSSAPI", use_ssl=True, kerberos_service_name='impala')conn = connect(host='myhost', port=21050, auth_mechanism='LDAP', password='ldap_pass', user='user', use_ssl=True)或
conn = connect(host='myhost', port=21050, auth_mechanism='LDAP', password=ldap_pass, user='user', use_ssl=True, ca_cert="my/cert")连接后(使用任一方法),运行以下示例:
cursor = conn.cursor()
cursor.execute('show databases')
print(cursor.fetchall())https://stackoverflow.com/questions/54347860
复制相似问题