Подключитесь к Impala с помощью Kerberos auth thrift.transport.TTransport.TTransportException:
Я потратил много времени, пытаясь установить соединение с кераберизованным сервером impala через python. Это было возможно с 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
Я пробовал с другой версией Thrift (0.2.1), но у меня была та же ошибка. Любое предложение?
2 ответа
Хост должен быть просто именем хоста. Удалите часть до @ в вашем примере.
Также удалите пользователя и пароль. Kerberos использует билет Kerberos для аутентификации
Чтобы ответить на этот вопрос более полно, Kerberos делает Impyla более разборчивым, чем, например, Impala-shell, поэтому параметр hostname должен быть полностью определенным доменным именем узла, на котором запущен Impala, который зарегистрирован в Kerberos.
Например, мое имя службы impala - impala.somevalue.somedomain, это прекрасно работает с оболочкой impala И открытым соединением Impyla с открытым текстом. Он ломается только при использовании auth=GSSAPI. Чтобы исправить это, убедитесь, что хост является полным доменным именем.
например, мое fqdn на облачном провайдере - ip-xxx-xxx-xxx-xxx.somevalue.somedomain, где xxx - октеты IP-адреса.