微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Impyla连接无法启动SASL没有可用的机制

如何解决Impyla连接无法启动SASL没有可用的机制

每次遇到此错误,我都尝试使用impyla连接到impala

 Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'

我已经安装:

impyla==0.16.2
thrift_sasl==0.4.2
thrift==0.13.0
thriftpy==0.3.9
thriftpy2==0.4.11

我正在使用

connect = connect(host=server,port=21050,user=login,password=passwd,use_ssl=True,auth_mechanism='LDAP')

我以前在python 2.7上使用过它,现在它可以正常工作,现在当我移到3.6时它就停止了。

编辑: 我进行了更多研究,看来thrift_sasl无法识别“ LDAP”身份验证

TTransportException                       Traceback (most recent call last)
<ipython-input-4-562dbef67d96> in <module>
      7 select_offset = 0
      8 
----> 9 connect = connect(host='azrudb7006.ra.rockwell.com',database=db_name,auth_mechanism="LDAP")

~\Anaconda3\envs\py36\lib\site-packages\impala\dbapi.py in connect(host,port,database,timeout,use_ssl,ca_cert,auth_mechanism,user,password,kerberos_service_name,use_ldap,ldap_user,ldap_password,use_kerberos,protocol,krb_host,use_http_transport,http_path)
    148                           auth_mechanism=auth_mechanism,krb_host=krb_host,149                           use_http_transport=use_http_transport,--> 150                           http_path=http_path)
    151     return hs2.HiveServer2Connection(service,default_db=database)
    152 

~\Anaconda3\envs\py36\lib\site-packages\impala\hiveserver2.py in connect(host,http_path)
    823                                 auth_mechanism,password)
    824 
--> 825     transport.open()
    826     protocol = TBinaryProtocol(transport)
    827     if six.PY2:

~\Anaconda3\envs\py36\lib\site-packages\thrift_sasl\__init__.py in open(self)
     94       if status not in (self.OK,self.COMPLETE):
     95         raise TTransportException(type=TTransportException.NOT_OPEN,---> 96           message=("Bad status: %d (%s)" % (status,payload)))
     97       if status == self.COMPLETE:
     98         break

TTransportException: Bad status: 3 (b'Unsupported mechanism type ')

解决方法

我也遇到了这个错误。唯一的解决方案是删除 sasl 并使用 pure-sasl。

我的要求:

thrift-sasl==0.4.2
pure-sasl==0.6.2
impyla==0.16.3

对于 Windows,没有安装 sasl,因此可以正常工作,但在 Linux 机器上需要将其删除(在 thrift_sasl 中拉出),否则,通过 sasl 连接的工厂在 impyla 库中无法正常工作。

它还可以让你摆脱错误:TProtocolException No protocol version header

我的认识:

from impala.dbapi import connect
from impala.hiveserver2 import HiveServer2Connection

from config import Config


def init_connection():
    auth_mechanism = 'PLAIN'

    return connect(host=Config.HIVE_HOST,port=Config.HIVE_PORT,user=Config.HIVE_USER,auth_mechanism=auth_mechanism)


class PyHive:
    conn: HiveServer2Connection = init_connection()

    def __init__(self):
        self.cursor = self.conn.cursor()

    def __enter__(self):
        return self.cursor

    def __exit__(self,exc_type,exc_val,exc_tb):
        self.cursor.close()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。