Hbase协处理器

作者: ahzhaojj | 来源:发表于2016-11-13 22:07 被阅读0次

一、协处理器的介绍

Hbase可以让用户的部分逻辑在数据存放端及Hbase服务端进行计算的机制(框架)。协处理器允许用户在Hbase服务端上运行自己的代码。

二、协处理器的分类

加载角度分类—— 系统协处理器、 表协处理器(用户可以指定某一张表使用协处理器 )
功能角度分类—— Observer协处理器(相当于关系型数据库中的触发器 )、Endpoint协处理器(动态终端,类似于一个存储过程 )

2.1Observer分类

RegionObserver协处理器——允许处理region上的事件
RegionServerObserver协处理器——处理RegionServer上的事件
MasterObserver协处理器——专门处理HMaster上的一些事件,比如创建删除表等操作。
WalObserver协处理器——允许处理日志上的事件

2.2 Observer的执行流程

Observer的执行流程图.png

2.3Endpoint协处理器

实现代码被部署在HBase服务器服务端,需要自己写一个客户端,去调用服务端上的实现。


Endpoint.png

三、演示endpoint服务端编写

1.创建endpoint.proto文件,生成java文件

option java_pakage = “com.jkb.coprocessor.endpoint”;
option java_outer_classname = “Sum”;  
option java_generic_service = true;
option java_generate_equals_and_hash = true;
option optimize_for = SPEED;
message SumRequence{
required string family = 1;
required string column = 2;
}
message SumResponse{
required int64 sum = 1 [default = 0]; 
}
//定义rpc服务器类的定义
service SumService{
rpc getSum(SumRequest)
returns (SumResponse);
}

2.执行命令,将.proto文件生成java代码
protoc endpoint.proto --java_out=./
3.将java文件放入eclipse中相应的工程中相应的目录下,然后加载Hbase中的jar包
4.编写SumEndPoint.java

Package com.jkb.coprocessor.endpoint;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.Coprocessor;
import org.apache.hadoop.hbase.CoprocessorEnvironment;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.coprocessor.CoprocessorException;
import org.apache.hadoop.hbase.coprocessor.CoprocessorService;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
import org.apache.hadoop.hbase.protobuf.ResponseConverter;
import org.apache.hadoop.hbase.regionserver.InternalScanner;
import org.apache.hadoop.hbase.util.Bytes;

import com.google.protobuf.RpcCallback;
import com.google.protobuf.RpcController;
import com.google.protobuf.Service;

import edu.endpoint.Sum.SumRequest;
import edu.endpoint.Sum.SumResponse;
import edu.endpoint.Sum.SumService;

public class SumEndPoint extends SumService implements Coprocessor,CoprocessorService{
       private RegionCoprocessorEnvironment env;

    @Override
    public void getSum(RpcController controller, SumRequest request,
            RpcCallback<SumResponse> done) {
       Scan scan = new Scan(); 
       scan.addFamily(Bytes.toBytes(request.getFamily()));  
     scan.addColumn(Bytes.toBytes(request.getFamily()), Bytes.toBytes(request.getColumn()));
       SumResponse response = null;
       InternalScanner scanner = null;
       try{
           scanner = env.getRegion().getScanner(scan);
           List<Cell> results = new ArrayList<Cell>(); 
           boolean hasMore = false;
           Long sum = 0L;
           do{
               hasMore = scanner.next(results);
               for(Cell cell: results){
                   sum += Long.parseLong(new String(CellUtil.cloneValue(cell)));
               }
               results.clear();
           }while(hasMore);
           response = SumResponse.newBuilder().setSum(sum).build();
       }catch(IOException e){
           ResponseConverter.setControllerException(controller, e);
       }finally{
           if(scanner!=null){
               try {
                scanner.close();
            } catch (IOException e) {
            }
           }
       }
        done.run(response);
    }

    @Override
    public Service getService() {
        return this;
    }

    @Override
    public void start(CoprocessorEnvironment env) throws IOException {
        if(env instanceof RegionCoprocessorEnvironment){
            this.env = (RegionCoprocessorEnvironment)env;
        }else{
            throw new CoprocessorException("no load region");
        }

    }

    @Override
    public void stop(CoprocessorEnvironment arg0) throws IOException {

    }

}

相关文章

  • HBaseAPI应用与优化

    HBase API 客户端操作 HBaseAPI 客户端操作 代码: Hbase协处理器 协处理器概述 官方地址[...

  • 大数据实战(下)-HBase Coprocessor

    HBase协处理器思维导图

  • Hbase协处理器

    一、协处理器的介绍 Hbase可以让用户的部分逻辑在数据存放端及Hbase服务端进行计算的机制(框架)。协处理器允...

  • Hbase协处理器实战

    协处理器的实战定义 Hbase可以让用户的部分逻辑在数据存储端及hbase服务端进行计算的机制。协处理器允许用户在...

  • HBase学习 - Coprocessor

    本文基于hbase-1.3.0源码 1. 前言 HBase coprocessor(协处理器)按照工作方式分为两种...

  • HBase协处理器observer

    一、简介 本文将介绍HBase协处理器中的observer,observer协处理器类似于数据库中的触发器,也类似...

  • 【HBase】HBase 协处理器

    [TOC] 一、协处理器的产生 HBase 和 MapReduce 有很高的集成,可以使用 MR 对存储在 HBa...

  • 尚硅谷大数据技术之电信客服

    3.2.6 协处理器 重新编译项目,发布****jar****包到hbase****的lib****目录下(注意需...

  • 细述hbase协处理器

    1.起因(Why HBaseCoprocessor) HBase作为列族数据库最经常被人诟病的特性包括:无法轻易建...

  • 开发部署HBase Endpoint Coprocessor

    一、前言 本文示例协处理器实现根据scan条件对指点列进行count、avg。这里推荐HBase技术社区文章,该文...

网友评论

    本文标题:Hbase协处理器

    本文链接:https://www.haomeiwen.com/subject/dywcpttx.html