HBase2.0 Observer的一些改动

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

最近需要把一个1.x的Observer移植到HBase2.0,发现2.0里面Observer接口和1.x相比还是有不少不一样的地方。所以简单在JIRA里面看了一下,把遇到的几个改动点的来龙去脉看了一下。从log来看,2.0里面Observer的调整还是比较多的,有一些是和其他特性相关联的改动,一篇文章很难整理的全面,所以这里只列出我遇到的一些改动。相信这些问题会有一定的代表性。


HBASE-17732 Coprocessor Design Improvements

https://issues.apache.org/jira/browse/HBASE-17732

在这个issue里面针对1.x里面coprocessor存在的一些问题,对coprocessor的设计做了大的调整。大部分的调整都不涉及接口,但是由于把Coprocessor和Observer之间的继承关系改成了组合关系,所以coprocessor的代码需要做相应的调整。


1.x Coprocessor存在的问题
由于CoprocessorEnvironment和他所对应的Observer类型并不是静态绑定的,所以CoprocessorHost不知道自己对应的Observer类型是哪个。这就导致了如下问题:
问题1:所有的host加载所有的observer,比如,MasterCoprocessorHost也会加载RegionObserver(其实只需要加载MasterObserver)。

问题2:host需要在运行时通过进行‘observer instanceOf ExpectedObserver’这样的检查来过滤掉不兼容的observer。
问题3:coprocessor host实现中存在大量重复的方法。

Observer和Coprocessor之间的继承关系导致如下问题:
问题4:如果第三方的coprocessor要使用多个observer,就需要在一个类里面派生所有用到的observer,导致这个类里面方法太多,类变得庞大,例如AccessController类有100多个方法:


7174d229bed0b360238e0d49e256e8a28fafd835


解决办法
主要的改动有两个:

  1. 给CoprocessorEnvironment接口增加类型参数,变成CoprocessorEnvironment,这样每个CoprocessorHost里面只需要加载特定的Coprocessor即可。

  2. 引入4个coprocessor,并把coprocessor和Observer之间的关系由继承改为组合。

这样针对上面的问题1,CoprocessorHost可以通过CoprocessorEnvironment的类型参数和coprocessor的类型静态绑定,在加载时就可以忽略不匹配的类型。
针对问题2和问题3,新的实现里面把重复的方法都放在了CoprocessorHost里面做了实现。
针对问题4,把继承改为组合,同时在coprocessor里面提供了get方法来获得对应的Observer。

这里面,问题1,2,3其实都只涉及HBase内部运行机制,所对应的改动其实对coprocessor的开发也基本没有影响。真正对我们有影响的主要还是把继承改为组合。这样,之前的代码只需要继承Observer,现在则需要实现Observer和coprocessor两个接口。同时还需要实现coprocessor接口的getxxxObserver。


HBASE-17312 【JDK8】 Use default method for Observer Coprocessors

https://issues.apache.org/jira/browse/HBASE-17312

利用JDK8的新特性,给interface提供了默认实现,而不是像1.x里面放在Basexxx里面,这样对我们的影响是原来代码里面的
"Foo extends BaseXXXObserver"要改成"Foo implements XXXObserver"。


HBASE-18502 Change MasterObserver to use TableDescriptor and ColumnFamilyDescriptor

https://issues.apache.org/jira/browse/HBASE-18502

需要注意的是2.0里面TableDescriptor和HTableDescriptor的接口有一些地方不一样,需要针对性的做一些处理。


HBASE-18528 DON'T allow user to modify the passed table/column descriptor

https://issues.apache.org/jira/browse/HBASE-18528

如果之前有在coprocessor里面修改表或列族的一些属性的话,现在就需要重新设计了。


d3f2f0da5b6761a64c7049db7719525a2c492a0c


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


096973d69f34b1380151180fd0a8ff2cade5bced


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

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
分布式数据库 Hbase 设计模式
|
6月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
154 0
|
2月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
85 4
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
67 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
31 3
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
55 3
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
69 2
|
1月前
|
存储 分布式计算 Hadoop
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
49 2
|
5月前
|
存储 分布式计算 Hadoop
Hadoop节点文件存储HBase设计目的
【6月更文挑战第2天】
57 6
|
5月前
|
存储 分布式计算 Hadoop
Hadoop节点文件存储Hbase高可靠性
【6月更文挑战第2天】
91 2