注意:kylin会修改hbase,之后hbase启动需要加载 HDFS 的 kylin-coprocessor-3.1.2-0.jar

说明

Kylin 会在创建 Cube 表/初始化元数据 阶段将 kylin-coprocessor.jar 关联到 HBase,并通过修改 HBase 表的元数据属性 让 HBase 感知该 Jar。

注意-必看

不要删除 HDFS 的 /kylin 目录,kylin-coprocessor.jar 在该目录中,具体目录在:

/kylin/kylin_metadata/coprocessor/kylin-coprocessor.jar

Hbase 如何依赖 kylin-coprocessor.jar

kylin不会修改 hbase 的配置文件,而是在建表时,将 kylin-coprocessor.jar 添加到表描述中

查看表信息:

执行 hbase shell 命令,执行下面命令查看所有表:

list

执行结果如下:

TABLE
KYLIN_169HRCMRBL
kylin_metadata

查看 KYLIN_ 开头表的详细信息:

desc 'KYLIN_169HRCMRBL'

如下图红框处,依赖 HDFS 上的 jar:


详细解释

一、Kylin 何时添加/关联这个 Jar?(核心时机)

kylin-coprocessor.jar 并非“手动拷贝到 HBase 节点”就生效,Kylin 会在以下关键阶段将其与 HBase 表绑定:

1. 时机1:Kylin 集群初始化(首次部署)

Kylin 安装后执行 kylin.sh start 或初始化元数据时,会自动:

  • 检查 HDFS 路径 /kylin/kylin_metadata/coprocessor/ 是否存在该 Jar(若不存在,从 Kylin 本地 lib 目录上传);
  • 在 Kylin 元数据库(默认 H2/MySQL)中记录该 Jar 的 HDFS 路径(配置项 kylin.coprocessor.jar)。
    # 查看 Kylin 元数据中记录的 Jar 路径
    grep "kylin.coprocessor.jar" $KYLIN_HOME/conf/kylin.properties
    # 输出:kylin.coprocessor.jar=hdfs://hadoop1:8020/kylin/kylin_metadata/coprocessor/kylin-coprocessor-3.1.2-0.jar
    

2. 时机2:创建 Cube 时(核心绑定阶段)

当你在 Kylin 中创建并构建第一个 Cube 时,Kylin 会:

  1. 根据 Cube 的维度/指标定义,在 HBase 中创建对应的 Cube 表(表名通常以 KYLIN_ 开头);
  2. 向该 HBase 表的元数据属性 中写入“协处理器配置”,指定 Jar 包的 HDFS 路径 + 要加载的处理器类;
  3. 触发 HBase 表的元数据同步,让 RegionServer 后续加载该表时,自动从 HDFS 下载并加载该 Jar。

3. 时机3:Cube 升级/协处理器版本更新

当你升级 Kylin 版本(如从 3.1.0 → 3.1.2)或手动替换协处理器 Jar 后,重新构建 Cube 时,Kylin 会:

  • 覆盖 HDFS 中的旧 Jar 包;
  • 更新 HBase 表元数据中的 Jar 路径/版本,让 HBase 加载新 Jar。

二、Kylin 如何“修改”HBase?(仅修改表元数据,非核心代码)

Kylin 不会修改 HBase 的 hbase-site.xml、启动脚本等核心配置,仅通过 HBase 的协处理器注册机制,向 Cube 表的元数据中添加“协处理器属性”,属于 HBase 允许的“表级扩展”,具体分 2 步:

步骤1:Kylin 向 HBase 表写入协处理器元数据

Kylin 通过 HBase Java API 调用 HTableDescriptor.setCoprocessor() 方法,为 Cube 表添加协处理器配置,最终写入 HBase 的 hbase:meta 表(HBase 元数据表)。
你可以通过 HBase Shell 直接查看该配置(验证修改结果):

# 进入 HBase Shell,查看 Kylin Cube 表的协处理器配置
hbase(main):001:0> list  # 找到 Kylin 创建的表(如 KYLIN_169HRCMRBL)
hbase(main):001:0> describe 'KYLIN_169HRCMRBL'  # 查看表元数据

输出中会包含类似以下的协处理器配置(核心修改项):

{NAME => 'KYLIN_169HRCMRBL',
 COPROCESSOR => [
   'hdfs://hadoop1:8020/kylin/kylin_metadata/coprocessor/kylin-coprocessor-3.1.2-0.jar|top.kylin.coprocessor.KylinAggregationProcessor|1001|'
 ]
}

配置项拆解:
| 部分 | 含义 |
|———————————————————-|———————————————————————————————————|
| hdfs://.../kylin-coprocessor.jar | 协处理器 Jar 包的 HDFS 路径(Kylin 写入)|
| top.kylin.coprocessor.KylinAggregationProcessor | Jar 中要加载的核心处理器类(Kylin 自定义)|
| 1001 | 协处理器优先级(数值越大优先级越高)|

步骤2:HBase 加载协处理器(被动触发)

当 HBase RegionServer 加载该 Cube 表的 Region 时,会:

  1. 从 hbase:meta 表读取该表的协处理器配置;
  2. 从 HDFS 下载指定路径的 kylin-coprocessor.jar 到本地临时目录;
  3. 通过 CoprocessorClassLoader 加载 Jar 中的处理器类;
  4. 若 Jar 缺失/路径错误,直接抛出 FileNotFoundException(即你之前遇到的错误)。

三、如何手动修改/更新这个 Jar?(场景:版本升级/路径变更)

若需更换 Jar 版本(如 3.1.2 → 4.0.0)或修改 HDFS 路径,需同步更新「Kylin 配置」+「HBase 表元数据」,步骤如下:

步骤1:替换 HDFS 中的 Jar 包

# 1. 上传新 Jar 到 HDFS(替换旧版本)
hdfs dfs -rm /kylin/kylin_metadata/coprocessor/kylin-coprocessor-3.1.2-0.jar
hdfs dfs -put $KYLIN_HOME/lib/kylin-coprocessor-4.0.0.jar /kylin/kylin_metadata/coprocessor/

# 2. 赋予 HBase 可读权限
hdfs dfs -chown -R hbase:hbase /kylin/kylin_metadata/coprocessor/
hdfs dfs -chmod 644 /kylin/kylin_metadata/coprocessor/kylin-coprocessor-4.0.0.jar

步骤2:更新 Kylin 配置文件

修改 $KYLIN_HOME/conf/kylin.properties,同步 Jar 路径/版本:

# 旧配置
kylin.coprocessor.jar=hdfs://hadoop1:8020/kylin/kylin_metadata/coprocessor/kylin-coprocessor-3.1.2-0.jar
# 新配置
kylin.coprocessor.jar=hdfs://hadoop1:8020/kylin/kylin_metadata/coprocessor/kylin-coprocessor-4.0.0.jar

步骤3:更新 HBase 表的协处理器配置(关键!)

需手动修改 HBase Cube 表的元数据,替换旧 Jar 路径:

# 进入 HBase Shell
hbase shell

# 1. 禁用目标 Cube 表(修改表元数据需先禁用)
disable 'KYLIN_169HRCMRBL'

# 2. 修改协处理器配置(替换为新 Jar 路径)
alter 'KYLIN_169HRCMRBL', {NAME => 'KYLIN_169HRCMRBL', COPROCESSOR => [
  'hdfs://hadoop1:8020/kylin/kylin_metadata/coprocessor/kylin-coprocessor-4.0.0.jar|top.kylin.coprocessor.KylinAggregationProcessor|1001|'
]}

# 3. 启用表
enable 'KYLIN_169HRCMRBL'

# 4. 验证修改结果
describe 'KYLIN_169HRCMRBL'  # 确认 COPROCESSOR 中 Jar 路径已更新

步骤4:重启相关服务

# 1. 重启 HBase RegionServer(加载新 Jar)
hbase-daemon.sh stop regionserver
hbase-daemon.sh start regionserver

# 2. 重启 Kylin 服务(感知配置更新)
$KYLIN_HOME/bin/kylin.sh stop
$KYLIN_HOME/bin/kylin.sh start

四、关键补充:Kylin 对 HBase 的“修改”是可逆的

Kylin 仅修改特定 Cube 表 的元数据(添加协处理器属性),不会影响 HBase 集群的其他表/核心功能:

  • 若删除 Kylin Cube 表,该修改会随表元数据一起删除;
  • 若需完全移除该 Jar,只需删除 HBase 表的 COPROCESSOR 配置 + 删除 HDFS 中的 Jar 包即可,HBase 集群无残留影响。

总结

维度 具体说明
Jar 添加时机 1. Kylin 初始化时上传 Jar 到 HDFS;2. 创建 Cube 时绑定到 HBase 表元数据;3. Cube 升级时更新 Jar
HBase 修改方式 仅修改 Cube 表的元数据(添加 COPROCESSOR 属性),不修改 HBase 核心配置/代码
手动修改 Jar 步骤 替换 HDFS Jar → 更新 Kylin 配置 → 修改 HBase 表 COPROCESSOR → 重启服务

核心逻辑:Kylin 利用 HBase 的“表级协处理器注册机制”,将自定义 Jar 关联到 Cube 表,既扩展了 HBase 对 Cube 数据的处理能力,又避免了修改 HBase 集群的全局配置,是一种“非侵入式”的集成方式。


原文出处:/show_1GW2MyqjPoyT.html