python - 如何使用 Impyla 和 Kerberos 连接到 Apache Hadoop
问题描述
首先,我还阅读了这个问题(因为它似乎很相似)。
我的问题是我还尝试连接到现在由 Kerberos 保护的 Apache Hadoop 系统。我使用 impyla 模块来实现这一点。在 Hadoop 系统上安装 Kerberos 之前,它运行良好。现在我在互联网上尝试了不同的解决方案,但似乎没有任何效果,但我不得不承认我以前从未使用过 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 的模块”
在该错误消息上使用谷歌并不会让我找到有用的东西,很糟糕。有人说需要安装“pyKerberos”模块,但我不确定这是否能解决问题。
有什么我忘记了吗?我也有 Kerberos 主体和密码,并使用“MIT Kerberos Ticket Manager”管理它但也许我还必须以某种方式在代码中提供信息?
希望有人可以帮助我,因为我很困在这里。:-)
解决方案
我遇到了同样的问题,但我通过安装所需库的正确版本来修复它。
使用 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)