hbase协处理器Coprocessor(简介)

一:介绍

把一部分计算也移动到数据的存放端;允许用户执行region级的操作;可以动态加载。

二:使用场景:

1、使用钩子来关联行修改操作来维护辅助索引,或维护一些数据间的引用完整性。

2.权限控制

三:coprocessor两大类:observer和endpoint介绍

3.1Observer

与触发器类似;

regionobserver处理数据修改事件,表region联系紧密;

MasterObserver集群级事件操作,管理或DDL类型操作;

WALObserver控制WAL。

3.2Endpoint

用户自定义操作添加到服务端添加一些远程过程调用动态拓展RPC协议;与RDBMS存储类似;

3.3Coprocessor

所有的协处理器都必须实现这个接口,定义了协处理器的基本约定。

两个被应用于框架的枚举类:priority与state。

3.3.1Coprocessor.priority

定义的优先级

SYSTEM 最先被执行的协处理器;

USER 其他协处理器,按顺序执行;

3.3.2Coprocessor类接口提供的方法

void start(CoprocessorEnviroment env)throws IOException;

void stop(CoprocessorEnviroment env)throws IOException;

3.3.3CoprocessorEnviroment

(协处理器实例一直保存在提供的环境中)

3.3.4Coprocessor.state

定义的状态;

uninstalled:协处理器最初的状态

installed:实例装载了他的环境参数

starting:开始工作

active:start方法调用,处于active状态

stopping:stop方法被调用之前stopped:

stop方法将控制权交给框架

3.3.5CoprocessorHost类

维护协处理实例和他们专用环境

Coprocessor,CoprocessorEnviroment,CoprocessorHost形成协处理器类基础。

四:协处理器的加载:

1.从配置文件中加载(hbase-site.xml)

2.表描述符中加载HTableDescriptor.setValue()

五:RegionObserver类

region级别操作发生,会触发钩子函数

分为两类操作:region生命周期变化;客户端api调用

5.1RegionCoprocessorEnviroment

RegionObserver类的协处理器环境的实例;实现了CoprocessorEnviroment接口;

5.2ObserverContext

特殊的上下文:提供访问当前系统环境入口;提供关键功能通知协处理器在毁掉函数完成时需要做什么;

5.3BaseRegionObserver

所有用户实现监听类型协处理器基类,可以重载自己感兴趣的方法实现自己功能

六:MasterObserver类

处理master服务器的所有回调函数

6.1MasterCoprocessorEnviroment

封装了一个masterobserver实例;实现了CoprocessorEnviroment接口;

6.2BaseMasterObserver

扩展此类,实现自己功能;选择对应的pre.post方法;

七:endpoint:

hbase0.98之前:实现一个endpoint两个步骤:

1.拓展CoprocessorProtocol接口

给客户端提供自定义的rpc协议;

定义了客户端服务端的通信协议

2.拓展BaseEndpointCoprocessor类

hbase 0.98以上版本对endpoint的版本作了修改,修改后的使用

地址:90.2. Endpoint Example

(1)创建通信协议

一个proto文件,使用protoc工具来生成协议类文件。这个文件需要在服务端及客户端存在。

proto文件:

option java_package = "org.myname.hbase.coprocessor.autogenerated";

option java_outer_classname = "Sum";

message SumRequest {

  required string family = 1;

}

message SumResponse {

  required int64 sum = 1 [default = 0];

}

service SumService {

  rpc getSum(SumRequest)

      returns (SumResponse);

}

生成协议类文件:

$ protoc --java_out=src ./sum.proto

(2)创建一个Service类,实现具体的业务逻辑

例如官网例子:

public class SumEndPoint extends Sum.SumService implements Coprocessor, CoprocessorService {

@Override

public Service getService() {

                return this;

}

@Override

public void start(CoprocessorEnvironment env) throws IOException {

               if (env instanceof RegionCoprocessorEnvironment) {

                    .................

}

@Override

public void stop(CoprocessorEnvironment env) throws IOException {

       // do nothing

}

@Override

public void getSum(RpcController controller, Sum.SumRequest request, RpcCallback done) {

            Scan scan = new Scan();

            .............

          try {

             ............

}

(3)创建表时指定使用这个EndPoint,或者是全局配置

(4)创建一个Client类,调用这个RPC方法

例如:

try{

          Map results = table.coprocessorService(        

                    Sum.SumService.class,

                     null, /* start key */ 

                      null,/* end  key */

                       newBatch.Call() {

                        @Override

                          publicLongcall(Sum.SumService aggregate)throwsIOException{

                                BlockingRpcCallback rpcCallback =newBlockingRpcCallback<>();

                                aggregate.getSum(null, request, rpcCallback);

                                Sum.SumResponse response = rpcCallback.get();

                                  returnresponse.hasSum() ? response.getSum() :0L; 

         }       

 }    );

八:未完待续.....................................

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 一、协处理器的介绍 Hbase可以让用户的部分逻辑在数据存放端及Hbase服务端进行计算的机制(框架)。协处理器允...
    ahzhaojj阅读 2,539评论 1 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 概述 HBase 是一款基于 Hadoop 的 key-value 数据库,它提供了对 HDFS 上数据的高效随机...
    wingoom阅读 2,846评论 0 1
  • 文/一浅疏影 昨夜百无聊赖,混迹于网络,搜索自己时,无意间一张照片纳入视线。一幅稚嫩的面孔,一副小巧的眼镜,一抹高...
    一浅疏影阅读 1,124评论 31 62