为什么happybase返回" TSocket读取0字节"当我尝试运行table.scan()?

时间:2016-01-11 16:57:07

标签: python hbase thrift happybase

我使用happybase连接到HBase。到目前为止,连接很好。我们有节俭和运行。我能够连接到桌子(AFAIK),但当我尝试扫描桌子时,我得到TTransportException: TSocket read 0 bytes。这是我正在使用的代码。

import happybase
import json

connection = happybase.Connection('ipaddress', '22')

table = connection.table('rawdataingestion')

for key, data in table.scan():
    print key, data
    break

我在这里使用break,因此它不会打印出google行。我只想看到它正在建立连接并引入数据。

这是错误。

---> 38 for key, data in table.scan():
     39     print key, data
     40     break

/root/anaconda/lib/python2.7/site-packages/happybase/table.pyc in scan(self, row_start, row_stop, row_prefix, columns, filter, timestamp, include_timestamp, batch_size, scan_batching, limit, sorted_columns)
    372             )
    373             scan_id = self.connection.client.scannerOpenWithScan(
--> 374                 self.name, scan, {})
    375 
    376         logger.debug("Opened scanner (id=%d) on '%s'", scan_id, self.name)

/root/anaconda/lib/python2.7/site-packages/happybase/hbase/Hbase.pyc in scannerOpenWithScan(self, tableName, scan, attributes)
   1917     """
   1918     self.send_scannerOpenWithScan(tableName, scan, attributes)
-> 1919     return self.recv_scannerOpenWithScan()
   1920 
   1921   def send_scannerOpenWithScan(self, tableName, scan, attributes):

/root/anaconda/lib/python2.7/site-packages/happybase/hbase/Hbase.pyc in recv_scannerOpenWithScan(self)
   1930 
   1931   def recv_scannerOpenWithScan(self, ):
-> 1932     (fname, mtype, rseqid) = self._iprot.readMessageBegin()
   1933     if mtype == TMessageType.EXCEPTION:
   1934       x = TApplicationException()

/root/anaconda/lib/python2.7/site-packages/thrift/protocol/TBinaryProtocol.pyc in readMessageBegin(self)
    138         raise TProtocolException(type=TProtocolException.BAD_VERSION,
    139                                  message='No protocol version header')
--> 140       name = self.trans.readAll(sz)
    141       type = self.readByte()
    142       seqid = self.readI32()

/root/anaconda/lib/python2.7/site-packages/thrift/transport/TTransport.pyc in readAll(self, sz)
     56     have = 0
     57     while (have < sz):
---> 58       chunk = self.read(sz - have)
     59       have += len(chunk)
     60       buff += chunk

/root/anaconda/lib/python2.7/site-packages/thrift/transport/TTransport.pyc in read(self, sz)
    157       return ret
    158 
--> 159     self.__rbuf = StringIO(self.__trans.read(max(sz, self.__rbuf_size)))
    160     return self.__rbuf.read(sz)
    161 

/root/anaconda/lib/python2.7/site-packages/thrift/transport/TSocket.pyc in read(self, sz)
    118     if len(buff) == 0:
    119       raise TTransportException(type=TTransportException.END_OF_FILE,
--> 120                                 message='TSocket read 0 bytes')
    121     return buff
    122 

TTransportException: TSocket read 0 bytes

1 个答案:

答案 0 :(得分:2)

问题出在这里 -

connection = happybase.Connection('ipaddress', '22')

thrift的默认端口是9090。我将代码更改为

connection = happybase.Connection('ipaddress', 9090) 

并获取了我的数据。