HBase实操 | 开发部署HBase Endpoint类型的Coprocessor

1.文档编写目的



在前面的文章介绍了HBase自带的Coprocessor调用示例《如何使用Java调用HBase的 Endpoint Coprocessor》,本篇文章主要介绍如何开发一个HBase Endpoint类型的协处理器。


本篇文章示例协处理器主要实现了对列的Count、Max、Min、Sum以及Average。前面的文章调用Coprocessor定义的全局的,在本篇文章介绍另一种实现方式通过代码的方式对指定的表添加Coprocessor。


  • 内容概述

1.环境准备

2.使用Protobuf生成序列化类

3.Endpoint Coprocessor服务端实现

4.Endpoint Coprocessor客户端实现

5.部署及调用


  • 测试环境

1.CM和CDH版本为5.14.3

2.集群未启用Kerberos


2.环境准备



在HMaster、RegionServer内部,创建了RpcServer实例,并与Client三者之间实现了Rpc调用,在HBase0.95版本引入了Google-Protobuf作为中间数据组织方式,并在Protobuf提供的Rpc接口之上,实现了基于服务的Rpc实现。


Protobuf Buffers是一种轻便高效的结构化数据存储格式,可以用于数据序列化。适合做数据存储或RPC数据交换格式。用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。


这里Fayson借助于Protobuf来生成HBase RPC数据交换格式类,在HBase中使用的Protobuf版本为2.5.0,所以选择安装相同版本的Protobuf。


1.下载Protobuf2.5.0版本的安装包,地址如下:

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第1张图片

3.执行如下命令安装Protobuf所需要的依赖包

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第2张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第3张图片

6.准备HBase测试表,建表脚本及测试数据如下

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第4张图片

3.使用Protobuf生成序列化类



1.准备MyFirstCoprocessor.proto文件,内容如下

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第5张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第6张图片

2.在命令行执行如下命令生成Java类

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第7张图片

4.Endpoint Coprocessor服务端实现



1.使用Maven创建Java示例工程,pom.xml文件内容如下

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第8张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第9张图片

2.将Protobuf生成的java类拷贝至指定的包目录下

与MyFirstCoprocessor.proto文件指定的java_package包目录一致。

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第10张图片

3.在com.cloudera.hbase.coprocessor.server包下新建MyFirstCoprocessorEndpoint实现类,内容如下

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第11张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第12张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第13张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第14张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第15张图片

5.Endpoint Coprocessor客户端实现



1.编写MyFirstCoprocessExample.java类,代码如下:

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第16张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第17张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第18张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第19张图片

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第20张图片

6.部署及调用



1.使用mvn编译工程

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第21张图片

在客户端调用的示例代码中使用的是代码为指定的表添加Coprocessor操作,所以这里不需要在HBase中配置全局的Coprocessor。


3.运行MyFirstCoprocessorExample代码,查看运行结果

HBase实操 | 开发部署HBase Endpoint类型的Coprocessor_第22张图片

统计的值与我们写入的数据一致。


7.总结



  • 在开发HBase的Coprocessor借助于Protobuf生成RPC请求数据交互类,我们只需要在生成的类基础上实现业务即可。

  • 本篇文章主要介绍了怎么样通过代码的方式为指定的HBase表添加Coprocessor,这种方式使用更灵活,不需要重启HBase服务。

  • 将编写好的Coprocessor jar上传至HDFS,确保文件的目录属主。

  • HBase自带的也有AggregateImplementation类实现列的聚合,原生的不能同时对多个列进行聚合处理,如果需要多次聚合则需要多次调用RPC请求,HBase数据在不断的写入会出现每次聚合的结果有偏差,本示例将聚合放在一个RPC中处理可以减少RPC的请求次数并确保查询条件相同的情况下不会出现数据不一致问题。

 

GitHub地址:

https://github.com/fayson/cdhproject/blob/master/hbasedemo/proto/MyFirstCoprocessor.proto

https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/coprocessor/server/MyFirstCoprocessorEndPoint.java

https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/coprocessor/server/MyFirstCoprocessor.java

https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/coprocessor/client/MyFirstCoprocessExample.java


d3f2f0da5b6761a64c7049db7719525a2c492a0c


大家工作学习遇到HBase技术问题,把问题发布到HBase技术社区论坛http://hbase.group,欢迎大家论坛上面提问留言讨论。想了解更多HBase技术关注HBase技术社区公众号(微信号:hbasegroup),非常欢迎大家积极投稿。

096973d69f34b1380151180fd0a8ff2cade5bced
HBase技术交流社区 - 阿里官方“HBase生态+Spark社区大群”点击加入:https://dwz.cn/Fvqv066s

你可能感兴趣的:(HBase实操 | 开发部署HBase Endpoint类型的Coprocessor)