我花了很多时间试图通过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(,但我遇到了同样的错误。 有什么建议吗?
主机应该只是主机名。在您的示例中删除最多 @ 的部分。
同时删除用户和密码。Kerberos 使用 Kerberos 票证进行身份验证
为了更全面地回答这个问题,Kerberos 使 impyla 比 impala-shell 更挑剔,因此 hostname 参数必须是运行 impala(已注册到 Kerberos 的节点(的完全限定域名。
例如,我的 impala 服务名称是 impala.somevalue.somedomain,这适用于 impala shell 和纯文本 Impyla 连接。 它仅在您使用 auth=GSSAPI 时中断。 要修复它,请确保主机是 FQDN。
例如,我在云提供商上的FQDN是IP-xxx-xxx-xxx-xxx.somevalue.somedomain,其中xxx是IP地址八位字节。