首先,我也读了this question(因为它似乎很像)。
我的问题是我还尝试连接到我们的Apache Hadoop系统,该系统现在已由Kerberos保护。我使用impyla模块来实现此目的。在Kerberos系统上安装Kerberos之前,此方法运行良好。现在,我在Internet上尝试了不同的解决方案,但似乎没有任何效果,但是我不得不承认,我以前从未使用过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 Ticket Manager”进行管理。但是也许我还必须以某种方式在代码中提供信息?
希望有人可以帮助我,因为我被困在这里。 :-)
答案 0 :(得分: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.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)
答案 1 :(得分:0)
经过漫长而容易出错的方式,我终于找到了解决方案。 我没有使用库“ impyla”,而是使用了另一种方法: 我安装了cloudera ODBC驱动程序,并在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)
这很好用,我可以开始进一步处理了。