如何通过python访问hive?

xzlaal3s  于 2021-06-03  发布在  Hadoop
关注(0)|答案(16)|浏览(466)

https://cwiki.apache.org/confluence/display/hive/hiveclient#hiveclient-python似乎已经过时了。
当我将此添加到/etc/profile时:

export PYTHONPATH=$PYTHONPATH:/usr/lib/hive/lib/py

然后我可以按照链接中列出的方式进行导入,除了 from hive import ThriftHive 实际上需要:

from hive_service import ThriftHive

下一个例子中的端口是10000,当我尝试时导致程序挂起。默认的hive-thrift端口是9083,它停止了挂起。
所以我就这样安排:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
try:
    transport = TSocket.TSocket('<node-with-metastore>', 9083)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = ThriftHive.Client(protocol)
    transport.open()
    client.execute("CREATE TABLE test(c1 int)")

    transport.close()
except Thrift.TException, tx:
    print '%s' % (tx.message)

我收到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/hive/lib/py/hive_service/ThriftHive.py", line 68, in execute
self.recv_execute()
File "/usr/lib/hive/lib/py/hive_service/ThriftHive.py", line 84, in recv_execute
raise x
thrift.Thrift.TApplicationException: Invalid method name: 'execute'

但是检查thrifthive.py文件会发现在客户机类中执行的方法。
如何使用python访问配置单元?

sczxawaw

sczxawaw16#

这里有一个通用的方法,它使我很容易,因为我一直从python连接到多个服务器(sql、teradata、hive等)。因此,我使用pyodbc连接器。下面是使用pyodbc的一些基本步骤(以防您从未使用过它):
先决条件:在执行以下步骤之前,您应该在windows设置中具有相关的odbc连接。如果你没有,在这里找同样的
完成后:步骤1。pip安装: pip install pyodbc (以下是从微软网站下载相关驱动程序的链接)
第二步。现在,在python脚本中导入相同的内容:

import pyodbc

第三步。最后,继续并给出如下连接细节:

conn_hive = pyodbc.connect('DSN = YOUR_DSN_NAME , SERVER = YOUR_SERVER_NAME, UID = USER_ID, PWD = PSWD' )

使用pyodbc最好的部分是我只需要导入一个包就可以连接到几乎所有的数据源。

相关问题