#python #hadoop #hbase #thrift #happybase
#python #hadoop #hbase #бережливость #happybase
Вопрос:
Я пытаюсь создать таблицу с использованием Happybase. Для начала я ввожу следующие команды get Hbase и Thrift running:
start-hbase.sh
hbase thrift start amp;
Как только это запущено, я открываю командную строку Python и набираю следующее:
import happybase as hb
connection = hb.Connection()
connection.open()
Однако, когда я пытаюсь создать таблицу:
connection.create_table(
'mytable',
{'cf1': dict(max_versions=10),
'cf2': dict(max_versions=1, block_cache_enabled=False),
'cf3': dict(), # use defaults
}
Я получаю следующую ошибку, которую я просто не понимаю.
Traceback (most recent call last):
File "<stdin>", line 5, in <module>
File "/usr/local/lib/python2.7/dist-packages/happybase/connection.py", line 309, in create_table
self.client.createTable(name, column_descriptors)
File "/usr/local/lib/python2.7/dist-packages/thriftpy/thrift.py", line 198, in _req
return self._recv(_api)
File "/usr/local/lib/python2.7/dist-packages/thriftpy/thrift.py", line 210, in _recv
fname, mtype, rseqid = self._iprot.read_message_begin()
File "thriftpy/protocol/cybin/cybin.pyx", line 429, in cybin.TCyBinaryProtocol.read_message_begin (thriftpy/protocol/cybin/cybin.c:6325)
File "thriftpy/protocol/cybin/cybin.pyx", line 60, in cybin.read_i32 (thriftpy/protocol/cybin/cybin.c:1546)
File "thriftpy/transport/buffered/cybuffered.pyx", line 65, in thriftpy.transport.buffered.cybuffered.TCyBufferedTransport.c_read (thriftpy/transport/buffered/cybuffered.c:1881)
File "thriftpy/transport/buffered/cybuffered.pyx", line 69, in thriftpy.transport.buffered.cybuffered.TCyBufferedTransport.read_trans (thriftpy/transport/buffered/cybuffered.c:1948)
File "thriftpy/transport/cybase.pyx", line 61, in thriftpy.transport.cybase.TCyBuffer.read_trans (thriftpy/transport/cybase.c:1472)
File "/usr/local/lib/python2.7/dist-packages/thriftpy/transport/socket.py", line 125, in read
message='TSocket read 0 bytes')
thriftpy.transport.TTransportException: TTransportException(message='TSocket read 0 bytes', type=4)
)
Ответ №1:
Вам нужно указать адрес сервера и, возможно, порт:
connection = hb.Connection(SERVER, PORT)
Вероятно, вы можете опустить значение порта, поскольку, скорее всего, значение по умолчанию будет соответствовать, но на всякий случай проверьте, какой порт прослушивает ваш сервер thrift, и укажите это как числовое значение