HBase2.0 Observer的一些改动

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介:

最近需要把一个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

相关实践学习
云数据库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
相关文章
|
2月前
|
SQL 关系型数据库 分布式数据库
Flink报错问题之用flush方法写入hbase报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
3月前
|
分布式数据库 Hbase
HBase的数据删除是如何进行的?
HBase的数据删除是如何进行的?
100 0
|
11月前
|
Apache 容器
Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别
Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别
350 0
|
存储 监控
今日整理-Zookeeper 的 Watcher 机制,有哪些特性?
今日整理-Zookeeper 的 Watcher 机制,有哪些特性?
|
分布式数据库 Hbase
JavaAPI如何操作HBase完成CRUD
JavaAPI如何操作HBase完成CRUD
165 0
|
存储
Zookeeper Watcher 流程分析(结合源码)
ZK提供了分布式数据的发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某个主题对象,当这个主题对象自身状态发生变化时,会通知所有的订阅者。在ZK中引入了 Watcher 机制来实现这种分布式的通知功能。
100 0
|
Web App开发 分布式计算 分布式数据库
使用CopyTable同步HBase数据
CopyTable是Hbase提供的一个数据同步工具,可以用于同步表的部分或全部数据。本文介绍如何使用CopyTable同步HBase数据。针对没有hadoop集群的用户,还介绍了单机运行CopyTable的配置和参数。
8481 0
|
分布式数据库 Hbase 分布式计算
带你读《HBase原理与实践》之三:HBase依赖服务
Apache HBase是基于Apache Hadoop构建的一个高可用、高性能、多版本的分布式NoSQL数据库,是Google BigTable的开源实现,通过在廉价服务器上搭建大规模结构化存储集群,提供海量数据高性能的随机读写能力。
|
Java 分布式数据库 数据安全/隐私保护
Hbase-Observer
HBase的协处理器涵盖了两种类似关系型数据库中的应用场景:存储过程和触发器,所以协处理器也分为两种:用来实现存储过程功能的终端 程序EndPoint和用来实现触发器功能的观察者Observers Observer 在hbase2.
1936 0
HBase2.0 Observer的一些改动
最近需要把一个1.x的Observer移植到HBase2.0,发现2.0里面Observer接口和1.x相比还是有不少不一样的地方。所以简单在jira里面看了一下,把遇到的几个改动点的来龙去脉看了一下。
1346 0