基础知识(转自网络):
具体应用:hbase Coprocessor是很多人对hbase-0.92的重大期待之一。 现在hbase的coprocessor有两种完全不同的实现,分别是observer模式与endpoint模式,它们分别对应2000和2001两个issue。我们可以将observer模式看成数据库中的触发器,而endpoint可以看成是存储过程。
关于coprocessor我们可以从类继承关系上看到,如下图所示:
共有三个 Observer 对象,即 MasterObserver , RegionObserver 和 WALObserver 。它们的工作原理类似于钩子函数,在真实的函数实现前加入 pre (),实现后加入 post ()方法,来实现对操作进行一些嵌入式的改变。
- hbase coprocessor的实现分为observer与endpoint,其中observer类似于触发器,主要在服务端工作,而endpoint类似于存储过程,主要在client端工作
- observer可以实现权限管理、优先级设置、监控、ddl控制、二级索引等功能,而endpoint可以实现min、mas、avg、sum等功能
- coprocessor可以动态加载
最近几周一直在通过MasterObserver、RegionObserver做访问权限控制,经历不少的尝试、弯路,算是对其有了初步的使用的了解,总结如下:
1、新建类继承实现MasterObserver/RegionObserver接口(或继承BaseMasterObserver/BaseRegionObserver类)
2、复写一定的pre 、post方法来完成目的
3、导出jar包(可以通过Eclipse导出)
4、修改hbase/conf/hbase-env.sh 中的HBASE_CLASSPATH属性,添加3步中jar包位置。如:
5、修改hbase/conf/hbase-site.xml文件,添加export HBASE_CLASSPATH=/home/snre/hadoop-1.0.3/conf:/home/snre/hbaseclient.jar
value项与包中类位置有关。<property> <name>hbase.coprocessor.master.classes</name> <value>rong.accesscontrol.MasterAC</value> </property> <property> <name>hbase.coprocessor.user.region.classes</name> <value>rong.accesscontrol.RegionAC</value> </property>
对应与MasterObserver。hbase.coprocessor.master.classes
对应RegionObserver,有user的对-ROOT-,.META.不适用。hbase.coprocessor.user.region.classes/hbase.coprocessor.region.classes
我在使用过程中,如果配置成hbase.coprocessor.region.classes属性,会出现很多错误:(1)无法bin/stop-hbase.sh停止Hmaster(2)报错:region is not online:-ROOT-, ,0 等。原因我想大概如: http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/26465 。但还没有找到解决办法!
6、启动即可
7、还有很多问题有待补充。