我花了很多时间尝试通过python与kereberized impala服务器建立连接。有可能使用java jdbc。我不认为这是一个kereberos票的问题。如果我运行klist,我可以毫无问题地看到我的机票。
Ticket cache: FILE:/tmp/krb5cc_4356
Default principal: xx@xx.xx.xx
Valid starting Expires Service principal
05/12/18 20:17:22 05/13/18 06:17:22 krbtgt/xx.xx.xx@xx.xx.xx
renew until 05/19/18 20:17:22
我使用自己的krb5.config文件,就像我之前说的那样,我可以将它与java一起使用,所以我不知道这里的问题在哪里。 我的字符串连接:
conn = connect(host='impala/_HOST@xx.xx.xx, port=21050, auth_mechanism='GSSAPI', user='xx', password='xx', database = 'xx', kerberos_service_name='impala')
我总是遇到同样的问题:
File conexionsimple.py", line 18, in <module> protocol=None)
File dbapi.py", line 147, in connect auth_mechanism=auth_mechanism)
File hiveserver2.py", line 758, in connect transport.open()
File python2.7/site-packages/thrift_sasl/__init__.py", line 68, in open self._trans.open()
File /thrift/transport/TSocket.py", line 101, in open message=message)
thrift.transport.TTransport.TTransportException: Could not connect to impala/_HOST@xx.xx.xx:21050
版本:
python 2.7.14
thrift 0.9.3
thrift-sasl 0.3
sasl 0.2
impyla 0.14
我试过其他节俭版本(0.2.1),但我有同样的错误。 有什么建议吗?
答案 0 :(得分:0)
主机应该只是主机名。在示例中删除部分到@。
同时删除用户名和密码。 Kerberos使用kerberos票证进行身份验证
答案 1 :(得分:0)
要更全面地回答此问题,与使用impala-shell相比,kerberos使impyla更具挑剔性,因此hostname参数必须是运行kerberos的运行impala的节点的完全限定域名。
例如,我的impala服务名称是impala.somevalue.somedomain,这在impala shell和纯文本Impyla连接中可以正常使用。仅当您使用auth = GSSAPI时,它才会中断。要对其进行修复,请确保主机为FQDN。
例如我在云提供商上的fqdn是ip-xxx-xxx-xxx-xxx.somevalue.somedomain,其中xxx是IP地址八位字节。