Hbase协处理器(Coprocessor)

来源:互联网 发布:unity3d 刚体穿透 编辑:程序博客网 时间:2024/06/06 10:48

观察者的设计意图是允许用户通过插入代码来重载协处理器框架的upcall方法,而具体的事件触发的callback方法由HBase的核心代码来执行。协处理器框架处理所有的callback调用细节,协处理器自身只需要插入添加或者改变的功能。

以HBase它提供了三种观察者接口:

RegionObserver:提供客户端的数据操纵事件钩子:Get、Put、Delete、Scan等。
WALObserver:提供WAL相关操作钩子。
MasterObserver:提供DDL-类型的操作钩子。如创建、删除、修改数据表等。

自定义observer

package coprocessortest;import java.io.IOException;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;import org.apache.hadoop.hbase.coprocessor.ObserverContext;import com.sun.org.apache.commons.logging.Log;import com.sun.org.apache.commons.logging.LogFactory;/** * hbase提供了类似于触发器的组件observer,类似于存储过程的endpoint。 * hbase中的observer分别三类,MasterObserver、RegionObserver、WALObserevr * 使用java代码也可以达到相同的效果,但是服务器端的observer相对是比较高效的 * @author 韩利鹏 */public class CoprocessorTest extends BaseMasterObserver{    Log log = LogFactory.getLog(CoprocessorTest.class);    //在删除table之前做的动作           @Override    public void preDeleteTable(ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName)            throws IOException {        log.info("--------------------------start delete table------------------"+tableName);     }    //在删除table之后做的动作    @Override    public void postDeleteTable(ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName)            throws IOException {        /*// TODO Auto-generated method stub        super.postDeleteTable(ctx, tableName);*/        log.info("-----------------------------having delete table-----------------------"+tableName);    }}

要想是自己写的自定类起作用不要吧这个类打成jar包,上传到hbase的lib目录下
然后再hbase-default.xml文件中的配置修改为(可能有默认值,有默认值只需要修改value就好了)

<property>                <name>hbase.coprocessor.master.classes</name>                <value>com.lanyun.hadoop2.MyObserver</value></property>

重启hbase集群,然后见表,观察log日志的变化

0 0
原创粉丝点击