You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HBase 2.4 RegionCoprocessor抛出UnknownProtocolException求助

解决HBase 2.4中Endpoint协处理器UnknownProtocolException异常

问题背景

原在HBase 1.4运行正常的STQueryEndPoint Endpoint协处理器,迁移到HBase 2.4后出现UnknownProtocolException,日志显示协处理器已加载,但调用时提示"No registered coprocessor service found for QueryService"。

核心原因

HBase 2.x对CoprocessorService的注册机制做了调整:1.4版本中继承自动生成的Protobuf Service类并实现CoprocessorService接口时,框架会隐式完成服务注册;但2.x版本要求必须显式重写getService()方法返回服务实例,否则Region无法识别对应的Protocol服务。

解决方案

1. 修正协处理器代码,显式实现getService()方法

修改STQueryEndPoint类,必须重写CoprocessorService接口的getService()方法返回当前实例,同时确保实现Protobuf Service定义的业务方法:

public class STQueryEndPoint extends QueryCondition.QueryService implements RegionCoprocessor, CoprocessorService {

    // 必须重写此方法,返回当前服务实例
    @Override
    public Service getService() {
        return this;
    }

    // 实现Protobuf Service中定义的query方法
    @Override
    public void query(RpcController controller, QueryCondition.QueryRequest request, RpcCallback<QueryCondition.QueryResponse> done) {
        // 编写业务逻辑,构建并返回响应
        QueryCondition.QueryResponse response = QueryCondition.QueryResponse.newBuilder()
                // 添加响应数据逻辑
                .build();
        done.run(response);
    }
}

2. 确保Protobuf版本与HBase 2.4兼容

HBase 2.4使用的Protobuf版本为3.5.1,需确保协处理器编译时依赖的Protobuf版本与HBase一致,避免协议序列化/反序列化不匹配。Maven依赖示例:

<dependencies>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>2.4.15</version> <!-- 与你的HBase版本保持一致 -->
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>2.4.15</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>3.5.1</version> <!-- HBase 2.4对应的Protobuf版本 -->
        <scope>provided</scope>
    </dependency>
</dependencies>

3. 强制Region重新加载协处理器

重启RegionServer后,部分旧Region可能未重新加载新的协处理器,可通过禁用再启用表的方式强制刷新:

# 进入HBase Shell
hbase shell

# 禁用目标表
disable 'xz2_intersect_query_test2'

# 启用目标表
enable 'xz2_intersect_query_test2'

4. 验证协处理器加载状态

重新启动RegionServer后,检查日志确认协处理器已正确加载且无类加载异常:

INFO (CoprocessorHost.java:174) 03-02 00:36:31,178 System coprocessor query.coprocessor.STQueryEndPoint loaded, priority=536870911.

内容的提问来源于stack exchange,提问作者Dilibaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:37:11