Hbase的Endpoint实现

protobuf在windows环境下的安装

1、所需包下载地址:http://code.google.com/p/protobuf/downloads/list 。protobuf-x.x.x.tar.gz和protobuf-x.x.x-win32.zip 64位一样。

2、将protobuf-x.x.x-win32.zip 解压到 System32 文件夹下

3、解压protobuf-x.x.x-tar.gz到任意目录下,并复制protobuf-x.x.x-win32.zip的解压文件到src目录下

4、使用dos窗口进入到protobuf-x.x.x-tar.gz的解压路径下的java路径中,使用maven命令: mvn package 编辑该包。

生成protobuf-java-x.x.x.jar

5、使用自带的example测试环境是否安装成功,执行编译命令

protoc -I=<.proto文件路径>  --java_out=<编译后的文件路径>  xxxx.proto

.proto文件简介

/*全局属性定义,编译后的java类名,包路径*/

option java_package = "com.theta.hbase.coprocessor.protos";

option java_outer_classname = "CountProtos";

option java_generic_services = true;

option java_generate_equals_and_hash = true;

option optimize_for = SPEED;

/*具体的消息

*每个message域对应一个内部类,该内部类还包含一个Builder内部类

*域内字段会生成对应的 setter和getter方法

*使用Builder内部类来对字段赋值

**/

message CountRequest {

required string startKey = 1;

required string endKey = 2;

}

message CountResponse {

required int64 count = 1 [default = 0];

}

/*提供服务的类

*该类没有Builder内部类

*/

service CountService {

rpc count(CountRequest)

returns (CountResponse);

}

 

HbaseEndpoint的实现

使用protobuf的message做为消息传递的格式,使用Rpc做为传输协议,一般会定义三个protobuf域,用于请求、响应、和业务实现。

1、endpont端要实现protobuf的service内部类,实现service定义的具体方法。使用response返回给调用者。

例子,实现count操作

@Override

public void count(RpcController controller, CountRequest request,

RpcCallback<CountResponse> done) {

Scan scan = new Scan();

scan.setFilter( new FirstKeyOnlyFilter());

scan.setStartRow(Bytes. toBytes(request.getStartKey()));

scan.setStopRow(Bytes. toBytes(request.getEndKey()));

InternalScanner scanner = null;

try {

scanner = env.getRegion().getScanner(scan);

List<Cell> results = new ArrayList<Cell>();

boolean hasMore = false;

byte[] lastRow = null;

long count = 0;

do {

hasMore = scanner.next(results);

for (Cell kv : results) {

byte[] currentRow = CellUtil.cloneRow(kv);

if (lastRow == null || !Bytes.equals(lastRow, currentRow)) {

lastRow = currentRow;

count++;

}

}

results.clear();

while (hasMore);

response = CountProtos.CountResponse.newBuilder().setCount(count).build();

catch (IOException ioe) {

ResponseConverter. setControllerException(controller, ioe);

finally {

if (scanner != null) {

try {

scanner.close();

catch (IOException ignored) {

}

}

}

done.run(response);

}

2、client端使用HTable实例的 coprocessorService 方法发送Rpc请求,得到response结果

例子:

public long count(HTableInterface ht, String startKey, String endKey)

throws Throwable {

final CountProtos.CountRequest request = CountProtos.CountRequest

newBuilder().setStartKey(startKey).setEndKey(endKey).build();

Map< byte[], Long> results = ht.coprocessorService(

CountProtos.CountService. classnull , null,

new Batch.Call<CountProtos.CountService, Long>() {

public Long call(CountProtos.CountService counter)throws IOException {

ServerRpcController controller = new ServerRpcController();

BlockingRpcCallback<CountProtos.CountResponse> rpcCallback = new

BlockingRpcCallback<CountProtos.CountResponse>();

counter.count(controller, request, rpcCallback);

CountProtos.CountResponse response = rpcCallback.get();

if (controller.failedOnException()) {

throw controller.getFailedOn();

}

return (response != null && response.getCount() != 0) ?

response.getCount() : 0;

}

});

System. out.println(results.values());

return results.size();

}

时间: 2024-08-27 18:13:39

Hbase的Endpoint实现的相关文章

[How to] 使用HBase协处理器---Endpoint客户端代码的实现

1.简介 不同于Observer协处理器,EndPoint由于需要同region进行rpc服务的通信,以及客户端出数据的归并,需要自行实现客户端代码. 基于[How to] 使用HBase协处理器---Endpoint服务端的实现这篇文章,我们继续实现其客户端代码. 2.客户端代码实现方式介绍 目前基于HBase1.0.0的版本客户端一共可以基于以下五个API来实现: 1. Table.coprocessorService(byte[]) 基于单个region的服务请求,参数为rowKey值,被

HBase EndPoint加载失败

概述 参考博客(http://blog.csdn.net/carl810224/article/details/52224441)编写EndPoint协处理器,编写完成后使用Maven打包(使用assembly插件,指定descriptorRefs值为jar-with-dependencies,将依赖的jar包也加进来),再将jar包上传到HDFS上,然后使用添加协处理器到指定表: disable 'test_table' alter 'test_table',METHOD=>'table_at

HBase 协处理器详解

一.简述 在使用HBase时,如果你的数据量达到了数十亿行或数百万列,此时能否在查询中返回大量数据将受制于网络的带宽,即便网络状况允许,但是客户端的计算处理也未必能够满足要求.在这种情况下,协处理器(Coprocessors)应运而生.它允许你将业务计算代码放入在RegionServer的协处理器中,将处理好的数据再返回给客户端,这可以极大地降低需要传输的数据量,从而获得性能上的提升.同时协处理器也允许用户扩展实现HBase目前所不具备的功能,如权限校验.二级索引.完整性约束等. 二.协处理器类

HBase多条件及分页查询的一些方法

HBase是Apache Hadoop生态系统中的重要一员,它的海量数据存储能力,超高的数据读写性能,以及优秀的可扩展性使之成为最受欢迎的NoSQL数据库之一.它超强的插入和读取性能与它的数据组织方式有着密切的关系,在逻辑上,HBase的表数据按RowKey进行字典排序, RowKey实际上是数据表的一级索引(Primary Index),由于HBase本身没有二级索引(Secondary Index)机制,基于索引检索数据只能单纯地依靠RowKey.也只有使用RowKey查询数据才能得到非常高

基于solr实现hbase的二级索引

一.目的 了解hbase的都知道,由于hbase基于行健有序存储,在查询时使用行健十分高效,然后想要实现关系型数据库那样可以随意组合的多条件查询.查询总记录数.分页等就比较麻烦了.想要实现这样的功能,我们可以采用两种方法: 使用hbase提供的filter, 自己实现二级索引,通过二级索引查询多符合条件的行健,然后再查询hbase. 第一种方法不多说了,使用起来很方便,但是局限性也很大,hbase的filter是直接扫记录的,如果数据范围很大,会导致查询速度很慢.所以如果能先使用行健把记录缩小到

HBase视频教程

基于微博数据应用的HBase实战开发 课程观看地址:http://www.xuetuwuyou.com/course/150 课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程用到的软件 1.centos6.7 2.apache-tomcat-7.0.47 3.solr-5.5 4.zookeeper 3.4.6 5.eclipse-jee-neon-R-win32-x86_64  6.jdk1.7_49 7.HBase1.2.2 8.Ganglia3.7.2 9.

基于微博数据应用的HBase实战开发_HBase视频教程

基于微博数据应用的HBase实战开发 课程观看地址:http://www.xuetuwuyou.com/course/150 课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程用到的软件 1.centos6.7 2.apache-tomcat-7.0.47 3.solr-5.5 4.zookeeper 3.4.6 5.eclipse-jee-neon-R-win32-x86_64  6.jdk1.7_49 7.HBase1.2.2 8.Ganglia3.7.2 9.

HBase协处理器

说明:类似于RDBMS中触发器,允许用户在region服务器上运行自己的代码,在客户端用户不用关心操作具体在哪进行 使用场景:权限控制,回调函数(钩子函数).扫描统计等 主要类:observer和endpoint observer:类似触发器,回调函数在特定事件发生时执行 endpoint:类似数据库存储过程, Coprocessor:定义了协处理器的基本约定,所有协处理器必须实现Coprocessor类 协处理器加载:可以在hbase-site.xml中配置或者通过表描述符加载 eg:使用配置

HBase协处理器实战

主要内容: 1. HBase协处理器介绍 2. 观察者(Observer) 3. 终端(endpoint) ------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1. HBase协处理器介绍 系统协处理器可以全局导入regio