Hbase协处理器(Coprocessor)

观察者的设计意图是允许用户通过插入代码来重载协处理器框架的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日志的变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值