hbase自0.92之后开始支持coprocessor(协处理器),旨在使用户可以将自己的代码放在regionserver上来运行,即将计算程序移动到数
hbase自0.92之后开始支持coprocessor(协处理器),旨在使用户可以将自己的代码放在regionserver上来运行,即将计算程序移动到数据所在的位置进行运算。这一点与mapreduce的思想一致。hbase的coprocess分为observer和endpoint两大类。简单说,observer相当于关系型数据库中的触发器,而endpoint则相当于关系型数据库中的存储过程。关于hbase coprocessor的介绍网上有很多的文档,由于我也是刚刚学习,从很多好人贡献的文档上了解了很多。
这里记录一下自己在一个完全分布式系统上部署自定义的coprocessor的过程,本文会介绍两种部署的方法:一种是在hbase-site.xml中配置;第二种是使用表描述符来配置(alter);前者会被所有的表的所有的region加载,而后者只会对指定的表的所有region加载。本文会结合自己的实验过程指出哪些地方为易错点。
hadoop+hbase搭建云存储总结 pdf
hbase 结点之间时间不一致造成regionserver启动失败
hadoop+zookeeper+hbase集群配置
hadoop集群安装&hbase实验环境搭建
基于hadoop集群的hbase集群的配置 ‘
hadoop安装部署笔记之-hbase完全分布模式安装
单机版搭建hbase环境图文教程详解
首先,还是先来看下环境:
hadoop1.updb.com 192.168.0.101 role:master
hadoop2.updb.com 192.168.0.102 role:regionserver
hadoop3.updb.com 192.168.0.103 role:regionserver
hadoop4.updb.com 192.168.0.104 role:regionserver
hadoop5.updb.com 192.168.0.105 role:regionserver
首先编码自定义的coprocessor,该段代码摘自《hbase权威指南》 pdf下载见 ,只是修改了package的名字:
/**
* coprocessor
* 当用户在使用get命令从表中取特定的row时,就会触发这个自定义的observer coprocessor
* 触发条件是用户使用get指定的rowkey与程序中指定的fixed_row一致为@@@gettime@@@时
* 触发后的操作是程序会在服务端生成一个keyvalue实例,并将这个实例返回给客户端。这个kv实例是以
* @@@gettime@@@为rowkey,列族和列标识符均为@@@gettime@@@,列值为服务器端的时间
*/
package org.apache.hbase.kora.coprocessor;
import java.io.ioexception;
import java.util.list;
import org.apache.commons.logging.log;
import org.apache.commons.logging.logfactory;
import org.apache.hadoop.hbase.keyvalue;
import org.apache.hadoop.hbase.client.get;
import org.apache.hadoop.hbase.coprocessor.baseregionobserver;
import org.apache.hadoop.hbase.coprocessor.observercontext;
import org.apache.hadoop.hbase.coprocessor.regioncoprocessorenvironment;
import org.apache.hadoop.hbase.regionserver.hregion;
import org.apache.hadoop.hbase.util.bytes;
public class regionobserverexample extends baseregionobserver {
public static final log log = logfactory.getlog(hregion.class);
public static final byte[] fixed_row = bytes.tobytes(@@@gettime@@@);
@override
public void preget(observercontext c,
get get, list result) throws ioexception {
log.debug(got preget for row: + bytes.tostringbinary(get.getrow()));
if (bytes.equals(get.getrow(), fixed_row)) {
keyvalue kv = new keyvalue(get.getrow(), fixed_row, fixed_row,
bytes.tobytes(system.currenttimemillis()));
log.debug(had a match, adding fake kv: + kv);
result.add(kv);
}
}
}
编码完成后需要将该类编译并打成jar包,类名上右击--export,弹出如下窗口
选择jar file,然后next,出现如下窗口
指定jar文件的保存路径,然后finish,就完成了regionobserverexample类的编译和打包,接下来就需要将打好的jar文件使用ftp的方式上传到hbase集群的master服务器上,这里为hadoop1。
更多详情见请继续阅读下一页的精彩内容:
,