HBase AsyncHBase客户端

引入

HBase原生的Java客户端是完全同步的,在HBase响应请求的每个动作的时候都会短时间阻塞你的应用线程。
所以我们引入了asynchbase ,其也是由Java编写,并且是完全异步的,线程安全的。
asynchbase是在async的异步库上创建的。
不同于原生的HBase client,asynchbase 只能被实例化一次,只有在对不同的集群操作的时候才有可能生成多个实例。

使用asynchbase客户端
asynchbase的主入口是HBaseClient

  • asynchbase和HTable的性能对比 http://www.tsunanet.net/~tsuna/asynchbase/benchmark/viz.html
  • OpenTSDB is a distributed, scalable Time Series Database (TSDB) http://opentsdb.net/index.html
    从看asynchbase介绍来看,我猜想asynchbase用在MR范围还是有限的。
  • asynchbase就是一个异步client,能够很好地解决一个app里面对于hbase有很多个连接的场景。
  • 但是在MR里面,拿我们现在的HourlyProcedure来说,每次get都是一个同步过程,一定要取回结果才能够进行下一步的操作。整个MR框架就限制了异步client的作用。
  • asynchbase现在使用的场景应该是OpenTSDB,因为没有MR框架限制,所以异步client可以工作很好。
    note@2012-12-10: code/java/asynchbase下面有一些使用的示例代码,并且在自己的fast-hbase-rest里面也使用了asynchbase. 使用还是比较方便的。 实现上asynchbase没有使用任何org.apache.hbase的代码,从头完成了自己的协议访问,这个可以从HBaseClient的构造参数可以看到,在里面没有使用configuration, 而是直接传入quorumSpec就是zookeeper的地址。

Sample

HBase Table准备

1
2
3
4
5
6
hbase(main):023:0> create 'users',{NAME => 'info',VERSIONS => 1,TTL => 5184000,BLOCKCACHE => true}
0 row(s) in 2.3090 seconds

=> Hbase::Table - users

hbase(main):024:0> put 'users','1111','info:password','123456'
0 row(s) in 0.1140 seconds

参考资料