hbase自定义协处理器实现
- 首先编写代码,继承BaseRegionObserver,在代码中添加输出信息到/opt/apps/hbase_logs/hbase.log,如果协处理器生效,就会输出信息到hbase.log。
import org.apache.hadoop.hbase.CoprocessorEnvironment;
import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @Author: lih
* @Date: 2019/5/16 9:31 AM
* @Version 1.0
* 自定义协处理器
*/
public class MyRegionProcessor extends BaseRegionObserver {
public MyRegionProcessor() {
log("new MyRegionProcessor");
}
public void start(CoprocessorEnvironment e) {
log("start:" + this.toString());
}
public void stop(CoprocessorEnvironment e) {
log("stop:" + this.toString());
}
public void log(String log) {
try {
FileOutputStream fos = new FileOutputStream("/opt/apps/hbase_logs/hbase.log", true);
fos.write((log + "\r\n").getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.打包上传到服务器代码打成jar包上传到hbase所有节点的lib目录下
3.在hbase-site.xml中配置
<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>com.xxx.MyRegionProcessor</value>
</property>
为所有 table 加载了一个 cp class,可以用” ,”分割加载多个 class。
还可以使用动态加载,为一个表加载协处理器,这种方式不用上传jar包,同时不需要修改配置文件,可以不需要重启hbase。
启用表 aggregation,只对特定的表生效。通过 HBase Shell 来实现。
disable 指定表。 hbase> disable ‘mytable’
添加 aggregation
alter ‘dd’, METHOD => ‘table_att’, ‘Coprocessor’=>‘hdfs://xxx:8020/xxx-1.0.jar| com.xxx.MyRegionProcessor|2’
重启指定表 hbase> enable ‘mytable’
触发get 命令后,hbase_log中就会产生代码中的日志信息。
4.协处理器卸载
alter 'mytable', METHOD => 'table_att_unset', NAME => 'coprocessor$1'