HBase2.0 Observer的一些改动

简介: 最近需要把一个1.x的Observer移植到HBase2.0,发现2.0里面Observer接口和1.x相比还是有不少不一样的地方。所以简单在jira里面看了一下,把遇到的几个改动点的来龙去脉看了一下。

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

HBASE-17732 Coprocessor Design Improvements
在这个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,导致这个类里面方法太多,类变得庞大。例如

class AccessController implements MasterObserver,
    RegionObserver, RegionServerObserver, EndpointObserver,
    BulkLoadObserver, AccessControlService.Interface,
    CoprocessorService

这个类有100多个方法。

解决办法
主要的改动有两个:
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
利用jdk8的新特性,给interface提供了默认实现,而不是像1.x里面放在Basexxx里面,这样对我们的影响是原来代码里面的
"Foo extends BaseXXXObserver"要改成"Foo implements XXXObserver"。

HBASE-18502 Change MasterObserver to use TableDescriptor and ColumnFamilyDescriptor
需要注意的是2.0里面TableDescriptor和HTableDescriptor的接口有一些地方不一样,需要针对性的做一些处理。

HBASE-18528 DON'T allow user to modify the passed table/column descriptor
如果之前有在coprocessor里面修改表或列族的一些属性的话,现在就需要重新设计了。

目录
相关文章
|
移动开发 前端开发 JavaScript
前端摸鱼神器,设计稿一键导出 「小程序/Vue/Uni-app」代码
这款神器就是「CodeFun」,它号称“UI 设计稿智能生成源代码,10 分钟完成 8 小时工作量”,让我们做前端,不搬砖
2860 0
前端摸鱼神器,设计稿一键导出 「小程序/Vue/Uni-app」代码
|
7月前
|
人工智能 Linux API
阿里云/本地一键部署 OpenClaw 与千问/Coding Plan API配置指南+YouMind六大思维Skill,解锁AI创意思维
在日常工作与学习中,想法混乱、学习低效、创意枯竭、方案经不起推敲、汇报逻辑杂乱等问题频繁出现,成为效率提升的关键阻碍。与此同时,AI智能体框架OpenClaw(Clawdbot)凭借轻量化部署、多平台兼容、大模型无缝对接等优势,成为个人与小型团队实现自动化交互、消息处理、任务执行的重要工具,但不少零基础用户仍面临云端与本地环境配置复杂、API对接困难、报错无法排查等问题。
601 0
|
4月前
|
人工智能 运维 API
TokenOps:AI 调用成本从失控到可控的技术框架
黄仁勋称工程师年薪50万,却要花25万在AI Token上——揭示AI成本正从人力转向算力。Uber烧光全年AI预算、微软停用外部工具、账单碎片难追踪……企业正面临“能调不能管”的困境。TokenOps应运而生:实时计量、精准归属、动态预算,让AI调用从失控走向可控。
295 2
|
4月前
|
存储 缓存 索引
TokenPilot:让 LLM Agent 长会话成本降 60%+ 的上下文管理
《TokenPilot》提出缓存感知的上下文管理新范式,针对LLM Agent长任务中token膨胀与prompt cache失效的矛盾,创新性地融合入口压缩(稳定动态字段、精简噪声)与生命周期感知清理(保留残余价值历史),显著降低推理成本(连续任务成本最高降74%),同时提升缓存命中率与任务表现。
313 0
TokenPilot:让 LLM Agent 长会话成本降 60%+ 的上下文管理
|
4月前
|
编解码 调度
HappyHorse 1.1 来了:把"会动的故事板"喂给视频模型,它真的能拍
HappyHorse 1.1 正式发布!支持故事板→视频(R2V)、文生视频(T2V)、图生视频(I2V)三模式,显著提升运动建模、人物/场景一致性、长prompt调度、面部微表情与音画同步能力,真正实现“能拍短片”。官方Prompt库开源,含14个可复现Demo及完整素材,新用户赠10秒免费额度。
|
4月前
|
人工智能 编解码 安全
一站式AI视频翻译的技术架构:ASR→NMT→TTS→字幕压制的全链路设计
本文提出一套可落地的AI视频翻译系统架构,强调构建稳定、可追踪的数据管线而非简单串联模型。全链路分为输入、ASR、说话人分离、NMT、TTS、后处理和任务编排7层,以带时间轴/角色/状态的segment为核心数据结构,确保时间轴精准、声音不串、成品直发,专为出海、课程本地化与短剧翻译等场景优化。
|
7月前
|
人工智能 运维 供应链
企业建设BI平台要多少钱?2026年最新报价、成本构成与选型指南
2026年企业建设BI平台成本差异大:轻量级SaaS年投入5–23万元,中型私有化40–100万元,大型全栈超160万元。本文详解软件、实施、数据治理等真实成本构成,破除“重采购、轻服务”误区,并推荐瓴羊Quick BI——以智能小Q实现对话式分析、模块化降本增效、全域数据融合,助力企业高性价比迈向数据驱动。
|
10月前
|
数据采集 监控 数据安全/隐私保护
一文搞定 Python 正则表达式:常用场景速查表
本文通过20个实战案例详解Python正则表达式在邮箱验证、数据提取、文本处理等场景的应用,涵盖基础语法、高级技巧与性能优化,助你高效掌握这一字符串处理利器。
588 1
|
10月前
|
人工智能 弹性计算 数据可视化
跨境电商全栈上云:从建站、支付、物流到数据分析的阿里云方案
阿里云提供跨境电商全栈上云解决方案,涵盖全球化建站、跨境支付、智慧物流与数据驱动运营四大核心模块,助力企业实现低延迟访问、高转化支付、高效履约及精细化运营,提升全球竞争力。
|
Linux API 开发者
python2安装wxpython模块源
【4月更文挑战第4天】
417 11

热门文章

最新文章