将pyhive与kerberos票结合使用以连接到kerberized hadoop集群

时间:2019-08-16 08:41:04

标签: python hadoop hive kerberos pyhive

我想连接到我们的Kerberos化Hadoop集群上的Hive,然后从已经有自己的Kerberose Client并且可以正常工作,已经通过并测试了keytab的计算机上运行一些hql查询(显然是haha:))。

我们的Hadoop运行HWS 3.1和CentOS7,我的机器也运行CentOS7 我正在使用Python 3.7.3和PyHive(0.6.1)。

当我通过不同的论坛(HWS,Cloudera,在这里等等)时,我已经安装了一堆库(并且我也尝试卸载它们)

我是通过pip sasl库安装的

  • pure-sasl(0.6.1)
  • pysasl(0.4.1)
  • sasl(0.2.1)
  • thrift-sasl(0.3.0)

我是通过yum安装的

  • cyrus-sasl-2.1.26-23.el7.x86_64
  • cyrus-sasl-lib-2.1.26-23.el7.x86_64
  • cyrus-sasl-plain-2.1.26-23.el7.x86_64
  • saslwrapper-devel-0.16-5.el7.x86_64
  • saslwrapper-0.16-5.el7.x86_64
  • cyrus-sasl-lib-2.1.26-23.el7.i686
  • cyrus-sasl-devel-2.1.26-23.el7.x86_64

下面是我与蜂巢的联系

return hive.Connection(host=self.host, port=self.port,
       database=self.database, auth=self.__auth,
       kerberos_service_name=self.__kerberos_service_name)

这是我的Yaml的一部分

hive_interni_hdp: 
    db_type: hive 
    host: domain.xx.lan 
    database: database_name 
    user: user_name 
    port: 10000 
    auth: KERBEROS 
    kerberos_service_name: hive

当我尝试运行代码时,出现以下错误。

  File "/opt/Python3.7.3/lib/python3.7/site-packages/dfpy/location.py", line 1647, in conn
    self.__conn = self._create_connection()
  File "/opt/Python3.7.3/lib/python3.7/site-packages/dfpy/location.py", line 1633, in _create_connection
    kerberos_service_name=self.__kerberos_service_name)
  File "/opt/Python3.7.3/lib/python3.7/site-packages/pyhive/hive.py", line 192, in __init__
    self._transport.open()
  File "/opt/Python3.7.3/lib/python3.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: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found'

有人运气吗?障碍在哪里? Pyhive库,错误的Kerberos连接设置?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,我查看了此文档https://www.cyrusimap.org/sasl/sasl/sysadmin.html

在哪里提到了GSSAPI(使用的是Kerberos 5),我已经检查过,我使用

的机器不支持gssapi。
sasl2-shared-mechlist

它说明了

  

GSS-SPNEGO,登录,普通,匿名

但是在安装gssapi库之后

yum install cyrus-sasl-gssapi

机列表状态

  

GSS-SPNEGO,GSSAPI,登录,普通,匿名

然后我和胡雷再次运行代码!

P.S。不要忘了强化并确认您的密钥表有效

kinit -kt /root/user.keytab user@domain.com
klist