2016-06-22 74 views
0

我想连接到配置单元使用python 2(miniconda2安装)。 下面是代码我trying-pyhs2错误连接到kerberos启用配置单元

connection = hive.connect(host='psvlxihpnn1', port= '10000', authMechanism='KERBEROS', user='***',password='****', configuration={'krb_host': 'psvlxihpnn1', 'krb_service': 'ITEDM'}) 

Kerberos的主机安装在同一台主机上,并具有服务名称“ITEDM” 奇怪的是,我得到下面的错误 -

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/export/home/itedm/miniconda2/lib/python2.7/site-packages/pyhs2-0.6.0-py2.7.egg/pyhs2/__init__.py", line 7, in connect 
    File "/export/home/itedm/miniconda2/lib/python2.7/site-packages/pyhs2-0.6.0-py2.7.egg/pyhs2/connections.py", line 46, in __init__ 
    File "/export/home/itedm/miniconda2/lib/python2.7/site-packages/pyhs2-0.6.0-py2.7.egg/pyhs2/cloudera/thrift_sasl.py", line 66, in open 
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 (Server krbtgt/[email protected] not found in Kerberos database) 

我没有通过'krbtgt'作为用户,不知道为什么这个错误即将到来。 感谢您的帮助。

+0

语法是'service/host @ REALM'和'krbtgt“的意思是”实际上不是*授权*请求*服务*,而是*验证*请求获得KeRBeros票证授予票证(* krb tgt *)“ –

+0

而在TGT的情况下,”服务负责人“应该读作'krbtgt/REALM @ REALM'(只需使用'kinit someuser @ SOME.REALM'在默认缓存中创建一张票并检查结果'klist'),所以你显然有问题。 –

+0

另一方面,您的用户需要一个TGT,但Hive JDBC URL应明确提及** Hive服务**的Kerberos主体,即通常是'hive/hs2.host.fqdn @ REALM',因此您应该阅读仔细阅读关于这个难看的Python库的文档(如果有的话)。 –

回答

0

此连接字符串将只要运行该脚本的用户具有有效的Kerberos票据工作:

import pyhs2 

with pyhs2.connect(host='beeline_host', 
        port=10000, 
        authMechanism="KERBEROS") as conn: 

with conn.cursor() as cur: 
     print cur.getDatabases() 

用户名,密码和任何其他配置参数没有通过KDC通过。

相关问题