该部分总结的HBase权威指南
过滤器
用来减少查询结果的数量,在服务端进行过滤行为,减少和客户端的网络传送。实例化过滤器需要提供两个参数:比较运算符和比较器。
比较运算符
HBase内置的比较器
比较过滤器
行过滤器
行过滤器用于过滤行键(rowkey)
列簇过滤器
过滤列簇
列名过滤器
筛选特定的列
值过滤器
对列的值进行过滤,找到值满足需求的列
参考列过滤器
指定一个列作为参考,用来过滤其他列
专用过滤器
单列值过滤器
指定某列对其进行值比较(使用频率最高的filter)
setFilterIfMissing(true)可以将不存在该列的行过滤掉,否则如果该列不存在也被放到查询结果中了
单列排除过滤器
参考列不包含结果中
前缀过滤器
与前缀匹配的行都会返回
分页过滤器
对结果进行分页,需要制定pageSize
行键过滤器
只将结果总KeyValue实例的健返回,不返回value值
首次行键过滤器
只比较一行中的第一列,可以做 行数统计用
包含结束的过滤器
扫描中的开始行包含在结果中,但末尾航被排除在外,使用这个可以返回末尾航
时间戳过滤器
需要传入一个时间戳实例,返回与实例时间精准匹配的数据
列计数过滤器
限制每行最多返回多少列
列分页过滤器
对列进行分页,需要传入offset 和 limit两个参数,从第几列开始,一共包含几个列
列前缀过滤器
对列明进行前缀过滤
随机行过滤器
在结果中包含随机行,需要传入一个0 到 1 的参数,过滤器内部使用Random.nextFloat()判断下行是否过滤
附件过滤器
跳转过滤器
全匹配过滤器
FilterList
组合使用多个过滤器,过滤顺序即是将过滤器传入过滤集合的顺序,
自定义过滤器
过滤器总结
计数器
- 计数器实质是一个列,一个计数器对应一个列
- 用create创建,默认起始为0,每次加1
- 用incr增加,用get_counter 获取
单计数器
只操作一个计数器,用户自行定义列
多计数器
- 使用HTable()的方法increment() 创建实例,可以为实例传入行键(Rowkey),
- 此行可以包含多个计数器,
- 计数器更新时有锁,读取时没有锁
协处理器
- 允许用户将自己的代码打包上传到服务器上,在服务器上执行region级别的操作,类是触发器
- jar包可以动态加载
- HBase的授权认证和审查就是基于协处理器的
- 包含两种类型: observer 和 endpoint
observer
endpoint
Coprocessor接口
协处理器必须实现的借口,有两个枚举类 Priority 和 State;系统优先级大于用户优先级。
协处理器应该用getTable方法获取HTable类,这样更安全,因为这个方法会加一些默认的安全措施,比如,协处理器不可以对一行数据加锁
无法指定在哪个表操作时触发协处理器
常用方法
枚举类定义的状态
协处理器加载
可以通过配置文件加载或从表描述符加载
RegionObserver
负责处理region级别的操作,属于coprocess的第一个子类
处理region生命事件
处理客户端API事件
在客户端API执行前后进行拦截
RegionCoprocessorEnvironment
面向region子类提供一些特殊的方法
ObserverContext
回调函数需要的上下文参数,提供了当前系统环境的入口,同时可以通知协处理器在回调函数完成时做什么
BaseRegionObserver
所有协处理器的基类,包含RegionObserver的所有接口的空方法,默认该类没有任何没有任何功能,用户可以自定实现某些方法,类似自定义处理器
MasterObserver
属于coprocess的第二个子类,负责处理与表操作有关的回调函数
MasterCorprocessEnvironment
封装了masterobserver类,实现了CoprocessEnvironment接口,可以依赖此类获取协处理器上下文变量或实例
BaseMasterObserver
默认实现了masterobserver接口所有方法,空实现,用户可以集成此类来自定义方法
endpoint
CoprocessorProtocol
为客户端提供的自定义RPC协议,用户通过实现和扩展这个接口可以实现任何方法
BaseEndpointCoprocessor
抽象类,包含一些需要用户自行实现的抽象方法,实现endpoint有两个步骤:
- 扩展CoprocessorProtocol接口,定义客户端与服务器通信RPC协议;
- 实现endpoint的所有方法,包含抽象类BaseEndpointCoprocessor的方法
HTablePool
- 创建HTable很耗时,可以创建一个然后复用,HtablePool可以实现HTable的复用功能,避免反复创建浪费时间;
- Htable不是线程安全的,在多线程并发使用时需要注意;