python通过thrift针对hbase的性能测试

     这两天正在做mysql到hbase的数据迁移,本人java玩不转,用的是thrift hbase的手段。 一开始写入的时候,速度居然才有100,这太闹了把。  忍无可忍也,查了下资料,别人是用java,速度基本是在1500左右。  我就纳闷了,用java速度提升最主要是有 个叫做 setautoflush的东西。 

    public static void putData(String tableName) throws IOException{
        HTable table = (HTable) tablePool.getTable(tableName);// 获取表
        System.out.println("Auto flush:" + table.isAutoFlush());
        table.setAutoFlush(false);
        Put put1 = new Put(Bytes.toBytes("rowkey1"));

thrift作为rpc的一个服务层,他下面调用的应该也是java的类库,为啥就没有这相关的尼 。  


最后看了下源码,里面有个buffer ,咱们调用的时候,传递一个buffer值就行了 。  如果压力源如果的话,python thrift的写入速度是可以到1k左右的。 下面的那个测试是我在hbase的模拟环境搞的,他就几台服务器组件的hbase集群,性能一般,才到700左右。 


class TBufferedTransport(TTransportBase, CReadableTransport):
  """Class that wraps another transport and buffers its I/O.
#xiaorui.cc 
  The implementation uses a (configurable) fixed-size read buffer
  but buffers all writes until a flush is performed.
  """
  DEFAULT_BUFFER = 4096

  def __init__(self, trans, rbuf_size=DEFAULT_BUFFER):
    self.__trans = trans
    self.__wbuf = StringIO()
    self.__rbuf = StringIO("")
    self.__rbuf_size = rbuf_size

  def isOpen(self):
    return self.__trans.isOpen()

  def open(self):
    return self.__trans.open()

  def close(self):
    return self.__trans.close()

  def read(self, sz):
    ret = self.__rbuf.read(sz)
    if len(ret) != 0:
      return ret

    self.__rbuf = StringIO(self.__trans.read(max(sz, self.__rbuf_size)))
    return self.__rbuf.read(sz)

[transport/TTransport.py]

原文: xiaorui.cc 

完成, Hbase做大数据的持久化,还是不错的。  推荐使用 !


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注