2016-06-01 7 views
0

Я обращаюсь к Hbase, используя happybase с python.Ошибки тайм-аута Hbase продолжаются

Я очень простую функцию:

def connect(): 

    connection = happybase.Connection('myhost',myport) 
    table = connection.table('MY-TABLE') 
    try: 
     return str(table.row('my-row')) 
    except Exception as ioe: 
     return str(ioe) 
    finally: 
     connection.close() 

При запуске этой функции он прекрасно работает в течение нескольких минут, после чего я начинаю получать ошибки тайм-аута.

Исправление состоит в том, чтобы войти в консоль Hbase и открыть новый бережливый порт и указать на это.

Это работает снова в течение нескольких минут, а затем снова получаю ошибки таймаута.

Неплохое решение, любая идея, почему это может произойти?

EDIT

Вот ошибка:

`Traceback (most recent call last): 
    File "appi.py", line 38, in <module> 
    print connectx() 
    File "appi.py", line 26, in connectx 
    print str(table.row('1464242429566-2531079631688429')) 
    File "C:\Users\me\Downloads\happybase-master\happybase-master\happybase\table.py", line 116, in row 
    self.name, row, columns, {}) 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\thrift.py", line 160, in _req 
    return self._recv(_api) 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\thrift.py", line 172, in _recv 
    fname, mtype, rseqid = self._iprot.read_message_begin() 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\protocol\binary.py", line 372, in read_message_begin 
    self.trans, strict=self.strict_read) 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\protocol\binary.py", line 164, in read_message_begin 
    sz = unpack_i32(inbuf.read(4)) 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\transport\__init__.py", line 32, in read 
    return readall(self._read, sz) 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\transport\__init__.py", line 14, in readall 
    chunk = read_fn(sz - have) 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\transport\buffered\__init__.py", line 39, in _read 
    self._rbuf = BytesIO(self._trans.read(max(sz, self._buf_size))) 
    File "C:\Python27\lib\site-packages\thriftpy-0.3.8-py2.7.egg\thriftpy\transport\socket.py", line 108, in read 
    buff = self.sock.recv(sz) 
socket.timeout: timed out` 

ответ

1

Увеличьте время ожидания, установив свойство в hbase-site.xml, который будет доступен в hbase/conf

<property> 
    <name>hbase.regionserver.lease.period</name> 
    <value>900000</value> <!-- 900 000, 15 minutes --> 
    </property> 
    <property> 
    <name>hbase.rpc.timeout</name> 
    <value>900000</value> <!-- 15 minutes --> 
    </property> 
<property> 
    <name>zookeeper.session.timeout</name> 
    <value>20000</value> 
</property> 
+0

Постараюсь это. Но почему это, кажется, работает нормально в начале, а затем это время в 100% случаев. Должно быть, что-то «исправляемое» вызывает это? –

+0

Можете ли вы PLS. после завершения полной трассировки стека. –

+0

Спасибо за помощь. Ive отредактировал вопрос –

0

Вы также можете увеличить время ожидания в редакции happybase.Connection:

conn = happybase.Connection(server_url, 9090, timeout=100000) 

Существует общепринятой (но не выпустили) pull request чествования None как «никогда не тайм-аут»