带有Kerberos的PyHive在几次调用后引发身份验证错误



我正试图使用Python(PyHive-Lib(连接到Hive以读取一些数据,然后我将其进一步连接到配置单元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

观察工作时,当我执行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天

我知道这是一篇旧帖子。但是,如果你每次打电话都建立新的连接,你应该解决这个问题。

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__':
def newConnect(query):
h = Hive()
cur = h.connect().cursor()
cur.execute(query)
res = cur.fetchall()
return res
myConnectionAndResults = newConnect("select * from temp.migration limit 1")
print myConnectionAndResults

相关内容

  • 没有找到相关文章

最新更新