hbase-filter使用

2018-03-20 17:27:10 浏览数 (1)

使用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

0 人点赞