Hbase 协处理器 :批处理的,等价于存储过程或者触发器
[Observer]
观察者,类似于触发器,基于事件。发生动作时,回调相应方法。触发器,基于事件激活的。
RegionObserver //RegionServer区域观察者
MasterObserver //Master节点。
WAlObserver //
[Endpoint]
终端,类似于存储过程,客户端调用。
1.加载(定义之后再写入hbase-site.xml)
[hbase-site.xml]
<property>
<name>hbase.coprocessor.region.classes</name>
<value>coprocessor.RegionObserverExample,
coprocessor.AnotherCoprocessor</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>coprocessor.MasterObserverExample</value>
</property>
<property>
<name>hbase.coprocessor.wal.classes</name>
<value>coprocessor.WALObserverExample, bar.foo.MyWALObserver</value>
</property>
2.自定义观察者
package com.mao.hbase;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CoprocessorEnvironment;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessor;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
import org.apache.hadoop.hbase.coprocessor.RegionObserver;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.wal.WALEdit;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
/**
* 自定义区域观察者
* hbase 2.0 之前的版本是继承 baseRegionObserver 类
* hbase 2.0 之后是实现如下两个类的接口
* implements RegionObserver, RegionCoprocessor
*/
public class MyRegionObserver implements RegionObserver, RegionCoprocessor {
private void outInfo(String str){
try {
FileWriter fw = new FileWriter("/home/admin/coprocessor.txt",true);
fw.write(str + "\r\n");
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void start(CoprocessorEnvironment e) {
outInfo("MyRegionObserver.start()");
}
public void preOpen(ObserverContext<RegionCoprocessorEnvironment> e) {
outInfo("MyRegionObserver.preOpen()");
}
public void postOpen(ObserverContext<RegionCoprocessorEnvironment> e) {
outInfo("MyRegionObserver.postOpen()");
}
@Override
public void preGetOp(ObserverContext<RegionCoprocessorEnvironment> e, Get get, List<Cell> results) throws IOException {
String rowkey = Bytes.toString(get.getRow());
outInfo("MyRegionObserver.preGetOp() : rowkey = " + rowkey);
}
public void postGetOp(ObserverContext<RegionCoprocessorEnvironment> e, Get get, List<Cell> results) throws IOException {
String rowkey = Bytes.toString(get.getRow());
outInfo("MyRegionObserver.postGetOp() : rowkey = " + rowkey);
}
public void prePut(ObserverContext<RegionCoprocessorEnvironment> e, Put put, WALEdit edit, Durability durability) throws IOException {
String rowkey = Bytes.toString(put.getRow());
outInfo("MyRegionObserver.prePut() : rowkey = " + rowkey);
}
public void postPut(ObserverContext<RegionCoprocessorEnvironment> e, Put put, WALEdit edit, Durability durability) throws IOException {
String rowkey = Bytes.toString(put.getRow());
outInfo("MyRegionObserver.postPut() : rowkey = " + rowkey);
}
public void preDelete(ObserverContext<RegionCoprocessorEnvironment> e, Delete delete, WALEdit edit, Durability durability) throws IOException {
String rowkey = Bytes.toString(delete.getRow());
outInfo("MyRegionObserver.preDelete() : rowkey = " + rowkey);
}
public void postDelete(ObserverContext<RegionCoprocessorEnvironment> e, Delete delete, WALEdit edit, Durability durability) throws IOException {
String rowkey = Bytes.toString(delete.getRow());
outInfo("MyRegionObserver.postDelete() : rowkey = " + rowkey);
}
}
3.导出jar包。
4.复制jar到共享目录,分发到jar到hbase集群的hbase lib目录下.
[/soft/hbase/lib]