PyHive с Kerberos выдает ошибку аутентификации после нескольких вызовов - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь подключиться к Hive , используя Python (PyHive Lib) для чтения некоторых данных, а затем подключаю его к улью Flask для отображения вПриборная доска.

Все работает нормально для нескольких вызовов улья, однако вскоре после этого я получаю следующую ошибку.

Traceback (most recent call last):
  File "libs/hive.py", line 63, in <module>
    cur = h.connect().cursor()
  File "libs/hive.py", line 45, in connect
    kerberos_service_name='hive')
  File "/home1/igns/git/emsr/.venv/lib/python2.7/site-packages/pyhive/hive.py", line 94, in connect
    return Connection(*args, **kwargs)
  File "/home1/igns/git/emsr/.venv/lib/python2.7/site-packages/pyhive/hive.py", line 192, in __init__
    self._transport.open()
  File "/home1/igns/git/emsr/.venv/lib/python2.7/site-packages/thrift_sasl/__init__.py", line 79, in open
    message=("Could not start SASL: %s" % self.sasl.getError()))
thrift.transport.TTransport.TTransportException: Could not start SASL: Error in sasl_client_start (-1) SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_cdc995595290_51CD7j))

Ниже приводится мой код

from pyhive import hive
class Hive(object):
    def connect(self):
        return hive.connect(host='hive.hadoop-prod.abc.com',
                            port=10000,
                            database='temp',
                            username='gaurang.shah',
                            auth='KERBEROS',
                            kerberos_service_name='hive')


if __name__ == '__main__':

    h = Hive()
    cur = h.connect().cursor()
    cur.execute("select * from temp.migration limit 1")
    res = cur.fetchall()
    print res

Сценарий вызова

source .venv/bin/activate
for i in {1..50}
do
    python get_hive_data.py
    sleep 300
done

Наблюдение Когда он работает, я вижу hive в субъекте обслуживания, когда выполняю klist , но не вижу, когда вижу сообщение об ошибке выше.

Klist, когда он работает

Ticket cache: FILE:/tmp/krb5cc_cdc995595290_XyMnhu
Default principal: gaurang.shah@ABC.COM

Valid starting       Expires              Service principal
12/04/2018 14:37:28  12/05/2018 00:37:28  krbtgt/ABC.COM@ABC.COM
    renew until 12/05/2018 14:37:24
12/04/2018 14:39:06  12/05/2018 00:37:28  hive/hive_server.ABC.COM@ABC.COM
    renew until 12/05/2018 14:37:24

Klist, когда он не работает

Ticket cache: FILE:/tmp/krb5cc_cdc995595290_XyMnhu
Default principal: gaurang.shah@ABC.COM

Valid starting       Expires              Service principal
12/04/2018 14:37:28  12/05/2018 00:37:28  krbtgt/ABC.COM@ABC.COM
    renew until 12/05/2018 14:37:24

Обновление:

Так что я не думаю, что после определенного звонка, однако, я думаю, что после определенного времени.(Думаю один час).Я изменил время сна на 3600 сек и сразу после первого звонка я начал получать ошибку.

Это странно, так как билет на hive/hive_server.ABC.COM@ABC.COM был действителен в течение 7 дней

...