使用filter需要guava jar包

The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, and so forth.

否则出错:java.lang.NoClassDefFoundError: com/google/common/base/Preconditions

 

scan时候出现

java.lang.RuntimeException: org.apache.hadoop.hbase.regionserver.LeaseException: org.apache.hadoop.hbase.regionserver.LeaseException: lease '464943507681458694' does not exist

 

hbase客户端每次和regionserver交互的时候,都会在服务器端生成一个租约(Lease),租约的有效期由参数hbase.regionserver.lease.period确定。
客户端去regionserver取数据的时候,hbase中存得数据量很大并且很多region的时候的,客户端请求的region不在内存中,或是没有被cache住,需要从磁盘中加载,如果这时候加载需要的时间超过hbase.regionserver.lease.period所配置的时间,并且客户端没有和regionserver报告其还活着,那么regionserver就会认为本次租约已经过期,并从LeaseQueue从删除掉本次租约,当regionserver加载完成后,拿已经被删除的租约再去取数据的时候,就会出现如上的错误现象。(http://liuskysun.blog.163.com/blog/static/99812978201111195301995/

对应我的使用场景,只需要制定的row,取column page即可,因此使用Get 对象而不是Scan对象,添加一个过滤条件而不是组合row和columnPage作为过滤列表。 

 

hbase数据的排序方式:

HBase Table as Data Structures
• A table maps rows to its families
– SortedMap(Row  List(ColumnFamilies))
• A family maps column names to versioned values
– SortedMap(Column  SortedMap(VersionedValues))
• A column maps timestamps to values
– SortedMap(Timestamp  Value)
An HBase table is a three-dimensional sorted map
(row, column, and timestamp)

row,columnFamily 和 column都是正序排,version按时间倒序排

目前没有发现方法可以获取column的倒序(大->小),且使用不使用filter消耗时间都差不多,感觉时间消耗都在把冷数据调入内存而不是单独取出对应范围的column

posted on 2012-07-11 14:51  架构师刀哥  阅读(1848)  评论(0编辑  收藏  举报