这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
HBase 协处理器模仿 Google BigTable 的协处理器。协处理器的功能类似于 Linux 内核模块。它们提供了一种针对本地存储的数据运行服务器级代码的方法。它们提供的功能非常强大,但也带有很大的风险,并且可能在操作系统级别对系统产生不利影响。
协处理器不是为 HBase 的最终用户设计的,而是由需要向 HBase 添加专门功能的 HBase 开发人员使用的。使用协处理器的一个例子是可插拔压缩和扫描策略。
协处理器框架
HBase 协处理器的实现不同于 BigTable 的实现。HBase 框架提供了一个库和运行时环境,用于在 HBase 区域服务器和主进程中执行用户代码。
框架 API 在协处理器 包中提供。
框架提供了两种不同类型的协处理器。
协处理器的类型
-
系统协处理器
系统协处理器在区域服务器托管的所有表和区域上全局加载。
-
表协处理器
您可以在每个表的基础上指定应在表的所有区域上加载哪些协处理器。
该框架还提供了扩展的两个不同方式: 观察者和端点。
-
观察员
观察者类似于传统数据库中的触发器。它们允许您通过覆盖协处理器框架提供的调用方法来插入用户代码。回调函数在事件发生时从核心 HBase 代码执行。回调由框架处理,协处理器本身只需要插入扩展或替代功能。
提供的观察者接口
-
RegionObserver 为数据操作事件提供钩子,例如 Get、Put、Delete、Scan。每个表区域都存在一个 RegionObserver 协处理器的实例。RegionObserver 可以进行的观察范围仅限于该区域。
-
RegionServerObserver 提供与 RegionServer 相关的操作,例如停止 RegionServer 并在合并、提交或回滚之前或之后执行操作。
-
WALObserver 为与预写日志 (WAL) 相关的操作提供钩子。您可以观察或拦截 WAL 写入和重建事件。WALObserver 在 WAL 处理的上下文中运行。单个 WALObserver 存在于单个区域服务器上。
-
MasterObserver 为 DDL 类型的操作提供钩子,例如创建、删除、修改表。MasterObserver 在 HBase master 的上下文中运行。
可以一次加载多个给定类型的观察者。多个观察者被链接起来,按照指定的优先级顺序依次执行。没有什么可以阻止协处理器实现者在其安装的观察者之间进行内部通信。
较高优先级的观察者可以通过抛出 IOException 或 IOException 的子类来抢占较低优先级的观察者。
-
-
Endpoints(HBase 0.96.x 及更高版本)
由于引入了protobufs(,端点的实现在 HBase 0.96.x 中发生了重大变化。如果您在 0.96.x 之前创建了端点,则需要重写它们。端点现在被定义和调用为 protobuf 服务,而不是作为 Writable blob 传递的端点调用
动态 RPC Endpoints类似于存储过程。可以随时从客户端调用Endpoints。当它被调用时,它会在一个或多个目标区域远程执行,并将执行结果返回给客户端。
Endpoints实现安装在服务器上,并使用 HBase RPC 调用。客户端库提供了调用这些动态接口的便捷方法。
Endpoints,就像观察者一样,可以与任何已安装的观察者通信。这允许您将新功能插入 HBase,而无需修改或重新编译 HBase 本身。
实现Endpoints的步骤
-
在
.proto
文件中定义协处理器服务和相关消息 -
运行protoc命令以生成代码。
-
编写代码来实现以下内容:
- 生成的protobuf Service接口
- 新的org.apache.hadoop.hbase.coprocessor.CoprocessorService 接口(RegionCoprocessorHost 需要注册公开的服务)
-
客户端调用新的 HTable.coprocessorService() 方法来执行端点 RPC。
有关更多信息和示例,请参阅协处理器 包的 API 文档,以及
/hbase-examples/src/test/java/org/apache/hadoop/hbase/coprocessor/example/
HBase 源代码中包含的 RowCount 示例 。 -