pyhive,sqlalchemy无法连接到hadoop沙箱

时间:2017-02-13 18:23:31

标签: python hadoop hive sqlalchemy pyhive

我已安装,

pip install thrift
pip install PyHive
pip install thrift-sasl

和 由于pip install sasl失败,我下载了sasl‑0.2.1‑cp27‑cp27m‑win_amd64.whl文件并将其安装在我的Windows 8.1 PC中。

然后我写了这段代码,

from pyhive import hive
cursor = hive.connect('192.168.1.232', port=10000, auth='NONE')
cursor.execute('SELECT * from sample_07 LIMIT 5',async=True)
print cursor.fetchall()

这给出了错误:

Traceback (most recent call last):
  File "C:/DigInEngine/scripts/UserManagementService/fd.py", line 37, in <module>
    cursor = hive.connect('192.168.1.232', port=10000, auth = 'NONE')
  File "C:\Python27\lib\site-packages\pyhive\hive.py", line 63, in connect
    return Connection(*args, **kwargs)
  File "C:\Python27\lib\site-packages\pyhive\hive.py", line 104, in __init__
    self._transport.open()
  File "C:\Python27\lib\site-packages\thrift_sasl\__init__.py", line 72, in open
    message=("Could not start SASL: %s" % self.sasl.getError()))
thrift.transport.TTransport.TTransportException: Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2

并且此代码给出了

from sqlalchemy import create_engine
engine = create_engine('hive://192.168.1.232:10000/default')
try:
    connection = engine.connect()
except Exception, err:
    print err
result = connection.execute('select * from sample_07;')
engine.dispose()

此错误,

  

无法启动SASL:sasl_client_start(-4)SASL(-4)出错:否   机制可用:无法找到回调:2

我已从here下载了Hortonworks沙箱,并将其用于单独的服务器中。

注意:我也经历了this,但接受的答案对我不起作用,因为从hive导入ThriftHive会导致导入错误,尽管我已经安装了pip。所以我决定使用pyhive或sqlalchemy

如何轻松连接到配置单元并执行查询?

2 个答案:

答案 0 :(得分:1)

使用pyhive时,不能以auth="NOSASL"而不是"None"的身份进行身份验证,因此您的代码应如下所示:

from pyhive import hive
cursor = hive.connect('192.168.1.232', port=10000, auth='NOSASL')
cursor.execute('SELECT * from sample_07 LIMIT 5',async=True)
print cursor.fetchall()

答案 1 :(得分:0)

以下是在Windows上构建SASL的步骤,但您的里程可能会有所不同:这很大程度上取决于您特定系统的路径和可用库。

请注意,这些说明特定于Python 2.7(我看到您使用的是问题中的路径)。

高级概述是您正在安装此项目:https://github.com/cyrusimap/cyrus-sasl。为此,您必须使用用于构建Python 2.7的旧C ++编译器。还有其他几个步骤可以让它发挥作用。

预建步骤:

  1. 安装Microsoft Visual C++ Compiler for Python 2.7。使用默认安装路径 - 记下下两步安装的位置(下面列表中包含2个选项)
  2. this file复制到适合您的安装的任何包含位置
  3. 在同一个目录
  4. 中的this answer创建一个unistd.h文件

    构建步骤:

    1. git clone https://github.com/cyrusimap/cyrus-sasl
    2. 打开随步骤1编译器一起安装的“VS2013 x64 Native Tools命令提示符”
    3. 将目录更改为步骤4创建的目录,然后更改为lib子目录
    4. nmake /f ntmakefile STATIC=no prefix=C:\sasl64
    5. nmake /f ntmakefile prefix=C:\sasl64 STATIC=no install 请参阅下面的说明
    6. copy /B C:\sasl64\lib\libsasl.lib /B C:\sasl64\lib\sasl2.lib
    7. pip install thrift_sasl --global-option=build_ext \ --global-option=-IC:\\sasl64\\include \ --global-option=-LC:\\sasl64\\lib
    8. '包含'位置:

      • “C:\ Program Files(x86)\ Common Files \ Microsoft \ Visual C ++ for Python \ 9.0 \ VC \ include \ stdint.h”
      • “%USERPROFILE%\ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python \ 9.0 \ VC \ include”

      以下是对这些相同步骤的引用,以及一些其他注释和解释:http://java2developer.blogspot.co.uk/2016/08/making-impala-connection-from-python-on.html

      注意的 引用的指令也在includewin32\include子目录中执行了步骤(8),您可能也必须这样做。