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 показывает, что метод выполняется в классе Client.
Как я могу использовать Python для доступа к Hive?