2

我正在使用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 所以它不会打印出谷歌行。我只想看到它正在建立连接并引入数据。

这是错误。

---> 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
4

1 回答 1

2

问题出在这里——

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

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

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

并得到了我的数据。

于 2016-01-12T18:16:47.563 回答