在过去的几天里,我一直在绞尽脑汁尝试使用Windows上的 pyhive 连接到带有 Python 客户端的 Hive 服务器。我是 Hive 的新手(pyhive 也是如此),但我是一位经验丰富的 Python 开发人员。我总是收到以下错误:
(pyhive-test) C:\dev\sandbox\pyhive-test>python test.py
Traceback (most recent call last):
File "test.py", line 3, in <module>
conn = hive.Connection(host='192.168.1.196', port='10000', database='default', auth='NONE')
File "C:\Users\harnerd\Anaconda3\envs\pyhive-test\lib\site-packages\pyhive\hive.py", line 192, in __init__
self._transport.open()
File "C:\Users\harnerd\Anaconda3\envs\pyhive-test\lib\site-packages\thrift_sasl\__init__.py", line 84, in open
raise TTransportException(type=TTransportException.NOT_OPEN,
thrift.transport.TTransport.TTransportException: Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'
执行以下脚本时:
from pyhive import hive
conn = hive.Connection(host='192.168.1.196', port='10000', database='default', auth='NONE')
cur = conn.cursor()
cur.execute('show tables')
data = cur.fetchall()
print(data)
HiveServer2 实例是来自 Cloudera 的开箱即用 HDP 沙盒 VM,其中 HiveServer2 身份验证设置为“无”。
客户端是 Windows 10 上的 Anaconda 虚拟环境,使用 Python 3.8.5 和 conda 安装的以下软件包:
- pyhive 0.6.1
- 萨斯勒 0.2.1
- 节俭 0.13.0
- 节俭-sasl 0.4.2
现在我只是尝试使用上面的脚本连接到 Hive,但最终我打算在 Flask 应用程序的 SQLAlchemy 中使用 pyhive。换句话说:Flask -> Flask-SQLAlchemy -> SQLAlchemy -> pyhive。在生产中,Flask 应用程序将由 Cloudera Data Science Workbench(即某种 Linux 风格)托管,但将在 Windows 系统上开发(因此也必须运行)。
当然,我已经在 Cloudera 的网站和 GitHub 上查看了与 Hive 连接问题有关的许多问题,如果有人用枪指着我的头,我不得不说从 Windows 客户端尝试这个可能是问题的一部分因为这似乎不是一件很常见的事情。
No mechanism available
这个错误甚至意味着什么?如果有一些关于如何从 python 配置和使用 SASL 的文档,那肯定会很好——如果有的话,我想知道它。
FWIW,导致错误的行在thrift_sasl/__init__.py
:
ret, chosen_mech, initial_response = self.sasl.start(self.mechanism)
self.mechanism
是“平原”;chosen_mech
并且initial_response
是空字符串 ('')。ret
为 False,这会导致抛出异常。
我知道我不是唯一一个试图在 Windows 上使用 pyhive 连接到 Hive 的人 - 这个人(尝试从我的 PC 上通过 python 连接到 hive(hue) 时出现 SASL 错误 - Windows10)是,但他的“解决方案” - 安装Ubuntu 作为他的 Windows 机器上的虚拟机 - 不适合我。