`
zhangxiong0301
  • 浏览: 351114 次
社区版块
存档分类
最新评论

HBASE API高级特性

阅读更多

一、过滤器

 

HBASE过滤器用来过滤数据,减少传输到客户端的网络消耗,也可以为客户端减轻一些数据处理压力。过滤器主要分为:比较过滤器,专用过滤器,附加过滤器和自定义过滤器。

 

1.比较过滤器

比较过滤器基于某些运算做出过滤判定。过滤器的两个基本要素是:比较器和运算符。运算符有:等于、不等于,小于,小于等于,大于,大于等于,NO_OP等。比较器为键或值得比较提供比较方式:BinaryComparator,BinaryPrefixComparator,NullComparator,BitComparator,RegexStringComparator,SubStringComparator等。

RowFilter:基于行健比较过滤数据。

FamilyFilter:基于列族过滤数据。

QualifierFilter:比较列的名字来过滤数据。

ValueFilter:比较某一列的值来过滤数据。结合SubStringComparator或regexStringComparator可以做到强大的过滤功能。

DependentColumnFilter:参考列过滤器可以看做ValueFilter和时间戳过滤器的结合。构造函数不传递过滤器时只会提取时间戳与参考列时间戳相等的列,如果构造函数参数加入比较运算符和比较器,则组合时间戳和ValueFilter的结果进行过滤。

 

2。专用过滤器

这类过滤器直接继承自FilterBase,用于特定场景,有些只做行筛选,只适合扫描操作。

SingleColumnValueFilter:用一列的值决定整行数据是否包含进结果集。

SingleColumnValueExcludeFilter:类似SingleColumnValueFilter,只是结果集排除参考列。

PrefixFilter:行健前缀过滤器,只要行健满足给定的前缀就会把该行返回给客户端。

PageFilter:分页过滤器,一般客户端自己记住上一次最后的rowkey,把这个rowkey放入scan中,结合pageFilter实现数据过滤。

KeyOnlyFilter:只返回键不返回值,值可能用值得长度替代。

FirstKeyOnlyFilter:只返回第一列的键,扫描完一列之后会跳过这一行,直接扫描下一行。可以用在统计行数的应用中,也可以用在按时间戳生成的列名的应用中。

InclusiveStopFilter:普通扫描的结果中包含起始行,不包含结束行。该过滤器可以让扫描包括结束行。

TimeStampFilter:只返回满足一定时间戳的值。时间戳可以是一个list,也可以在此基础上设置范围。

ColumnCountGetFilter:限制每行返回的列数。适合get操作,不太适合scan。

ColumnPaginationFilter:列分页过滤器,构造函数传入列数和列的偏移量,则返回的每行都是在这个区间段的列。

ColumnPrefixFilter:对列名称进行前缀匹配。

RandomRowFilter:构造函数传入概率值,符合条件的行有一定几率被过滤掉。

 

3。附加过滤器

SkipFilter:用来封装一个过滤器,当内部过滤器满足过滤条件时,整行数据都被过滤掉。

WhileMatchFilter:当一行数据被过滤掉时,会放弃整个扫描。

 

二、计数器

 

通常hbase更新操作步骤:获取rowlock,查询数据,在客户端修改数据,执行put等操作,释放rowlock。在搞并发情况下很容易出问题。hbase提供了计数器功能,可以方便修改并提供原子性保证。可以一次更新多个计数器,但这些计数器必须位于同一行。batch方法是否支持Increment实例,未知。不需要初始化计数器,跟redis的incr命令一样,会默认初值为0.注意计数器列,不能用put操作,否则会得到奇怪的值。计数器传递负值则表示减少计数器当前值。计数器分为单计数器和多计数器。单计数器一次操作一个计数器,由htable的incrementColumnValue方法执行。多计数器由Increment类和htable的increment方法完成。

 

三、协处理器

 

协处理器用来在region服务器端做一些额外的计算,如监听事件和简单统计任务等,为客户端减少压力。

协处理器允许用户在服务器端执行自己的代码。使用协处理器可以建立辅助索引,或维护数据引用完整性。

协处理器分两类:Observer和endPoint。Observer类似触发器,在特定事件发生时执行,分为RegionObserver,MasterObserver,WALObserver。endPoint扩展了hbase的RPC协议,类似RDBMS中的存储过程。Observer和endPoint都基于Coprocessor框架的接口实现。

Coprocessor

所有协处理器类必须实现的接口,完成协处理器的基本约定,简化框架本身的管理。Coprocessor定义了协处理器的优先级:user和System。系统级高于用户级,同一优先级按序号排序。协处理器开始和结束时会调用start(CoprocessorEnvironment)和stop(CoprocessorEnvironment)方法。CoprocessorEnvironment用来在协处理器生命周期中保持其状态。Coprocessor.stat定义了协处理器的生命周期:UNINSTALLED,INSTALLED,STARTING,ACTIVE,STOPPING,STOPPED。另外会涉及到的类是CoprocessorHost类,维护了所有协处理器实例和他们专用的环境。

Coprocessor、CoprocessorHost、CoprocessorEnvironment构成协处理器类的基础,支持协处理器类的生命周期,管理协处理器的状态,提供环境参数。

 

协处理器加载

加载有两种方式:hbase-site.xml文件方式和建表改表语句中指定。配置文件方式会把配置的协处理器加载给每一张打开的表。建表语句方式只会将协处理器加载给特定的表,只会涉及有特定表的region的region服务器,也只能用于region服务器而不能是master或WAL相关的服务器上;建表方式指定协处理器,可以用htable的setvalue实现,也可以用shell在建表时设置属性:'Coprocessor$1' => 'path-to-jar|className|priority',路径可以是hdfs路径或本地文件系统路径。

 

regionObserver类

管理region级别的操作,操作分为:region生命周期变化和客户端API调用。region生命周期操作状态分为:region将要被打开时的状态pending OPen,preOPen和postOpen方法在region打开前后调用。region正常工作时的状态open对应的方法有:preflush/postflush,preCompact/postCompact,presplit/postSplit。region在关闭时的状态pending close对应的方法:preclose/postclose。

除了region本身的生命周期时间,regionObserver还处理客户端调用事件,几乎包括所有DML,如get,put,delete等等。

regionObserver涉及到的类还包括regionCoprocessorEnvironment和ObserverContext和baseRegionObserver等。

 

masterObserver

负责处理master服务器的所有回调函数,对应的操作为DDL比如createTable,deleteTable,addCoumn等。

 

endPoint

endpoint扩展了RPC,客户端利用endpoint可以在单个或多个region执行一些统计等操作,然后将各自结果返回给客户端。如果是单个region,则用htable.coprocessorProxy方法。如果是涉及多个region则用CoprocessorExec方法。实现endPoint需要两个步骤:1)扩展CoprocessorProtocol接口,设定客户端和服务器端的RPC协议;2)扩展BaseEndPointCoprocessor。

 

四、连接池

 

1)hbase客户端和服务器端的连接由配置文件控制,即一个Configuration实例对应一个连接,若几个htable公用了一个configuration实例,则底层连接只会有一个。

2)Htable不是线程安全的,本地的写缓冲区不能保证一致性,即使setAuto

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics