Предположим, что Hive установлен в кластере «g». У меня нет доступа к Золотому кластеру. Я занимаюсь разработкой python в кластере s. Я могу получить доступ к Hive из кластера «s» и запускать запросы.Python Hive: thrift.transport.TTransport.TTransportException: None
У меня есть нижний код для подключения к Hive из скрипта Python, работающего в кластере s.
some_table
- таблица, которая уже существует в улье. Я хотел бы выполнить простую команду select * from some_table
, чтобы получить некоторые результаты.
import sys
sys.path.append("/usr/lib/hive/lib/py")
from hive_service import ThriftHive
from hive_service.ttypes import HiveServerException
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
transport = TSocket.TSocket('what-ever-server', what-ever-port)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftHive.Client(protocol)
transport.open()
print "connect success"
client.execute("SELECT * FROM some_table")
print client.fetchAll()
print "executed"
Но я получаю следующую ошибку после печати «connect success». Я предполагаю, что соединение было успешным.
Traceback (most recent call last):
File "hiveConnect.py", line 30, in <module>
row = client.execute("SELECT * FROM some_table")
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 79, in recv_execute
(fname, mtype, rseqid) = self._iprot.readMessageBegin()
File "/usr/lib/hive/lib/py/thrift/protocol/TBinaryProtocol.py", line 137, in readMessageBegin
name = self.trans.readAll(sz)
File "/usr/lib/hive/lib/py/thrift/transport/TTransport.py", line 58, in readAll
chunk = self.read(sz-have)
File "/usr/lib/hive/lib/py/thrift/transport/TTransport.py", line 155, in read
self.__rbuf = StringIO(self.__trans.read(max(sz, self.DEFAULT_BUFFER)))
File "/usr/lib/hive/lib/py/thrift/transport/TSocket.py", line 94, in read
raise TTransportException('TSocket read 0 bytes')
thrift.transport.TTransport.TTransportException: None
Что я делаю неправильно в этом коде? Я не испытываю никакой ошибки при подключении к Hive с использованием имени сервера и порта, поэтому я предполагаю, что все в порядке и что соединение с Hive не является проблемой. Любая помощь приветствуется.