欢迎投稿

今日深度:

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

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


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版本的安装包,地址如下:

82f7f265d3f470dccb77cf693a175fc9b991aa6c

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

edbc5954fec35f3ef5ed0beeb13bb46c770e76ca

f370cae53efb3c0f17094a39372618ed57cf2e16

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

fe69dfd83195a56c420533d6654abd63e5373d0d

3.使用Protobuf生成序列化类



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

3fa901a5d2da8745a7f8d66c9a245aa81f177494

0dc50c60e824b64f888a2f4280cd4320c229e105

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

4d576c0e66e0e5498034dbb5fa95cae0c5e223e0

4.Endpoint Coprocessor服务端实现



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

870838ff6a3ed8c56c36944053510225939235ea

0824ec69abf8f883efe6bf3b4fcf28c4b51774f0

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

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

9dcfde35a2fb0c8ff09a4a2a708c86ff4cee00d1

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

4f336c737118f75802fe041a86bcf081087e9661

30f6cd59568540b9015b50dd4b921dd5fc184b0d

4c30df9d7d7f986e72ddfd71dc8e8871fdfdf82d

bb7bd71ab59a62f110488b2aeea702004e5abd77

91a6c6760a35a38a86941d74f2dca1a41991b674

5.Endpoint Coprocessor客户端实现



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

464ed295f79db0ce13b23c5bf11ea2395f16ae7f

976b266d2d3a0925ccf2a6968717bf78f3474e3c

66fd62962a0e5d51b28f9af41008c78770de0110

c7967d7dbc8e00c001f136cbcf4fbf002c81dc2c

537d38d5ab4e9186380e018193efa84ad17bdac6

6.部署及调用



1.使用mvn编译工程

7949e9a2bdff269543d5532c6acc795a9eda39e3

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


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

23b914ead202393c4e877a4df264037129eaec00

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


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技术社区

www.htsjk.Com true http://www.htsjk.com/hbase/11195.html NewsArticle HBase实操 | 开发部署HBase Endpoint类型的Coprocessor,hbasecoprocessor 1.文档编写目的 在前面的文章介绍了HBase自带的Coprocessor调用示例《 如何使用Java调用HBase的 Endpoint Coprocessor 》,本篇文章主...
评论暂时关闭