HBase的触发器——Observer

本文总阅读量

HBase中的observer分为三类:

MasterObserver、RegionObserver、WALOBserver。

自定义MasterObserver

1、继承BaseMasterObserver类

(是MasterObserver的默认实现类)

  • 覆盖其中的方法,实现需求

2、打成jar包,放到hbase的lib目录下

3、12.4.3.修改hbase的配置文件hbase-site.xml文件

增加如下内容

1
2
3
4
<property>
<name>hbase.coprocessor.master.classes</name>
<value>自己写的类的全路径名</value>
</property>

4、重启HBase集群

在重启集群的时候,使用tail -f …/hbse…master.log文件输出,判断是否出错。

5、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
* PreCreateTableObserver.java
*
* Created on: 2016年4月20日 下午3:20:20
* Author: Wayne 13186259527@163.com
*/

package HBase;

import java.io.IOException;

import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HTableDescriptor;
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;

/**
* @author Administrator
*
*/

public class PreCreateTableObserver extends BaseMasterObserver{

Log log = LogFactory.getLog(PreCreateTableObserver.class);
/* (non-Javadoc)
* @see org.apache.hadoop.hbase.coprocessor.BaseMasterObserver#preCreateTable(org.apache.hadoop.hbase.coprocessor.ObserverContext, org.apache.hadoop.hbase.HTableDescriptor, org.apache.hadoop.hbase.HRegionInfo[])
*/

@Override
public void preCreateTable(
ObserverContext<MasterCoprocessorEnvironment> ctx,
HTableDescriptor desc, HRegionInfo[] regions) throws IOException
{

log.info("\n这段代码被执行了\n");
}
}

六、测试

在hbase建表后,查看master.log.发现: