说明
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 会:
- 根据 Cube 的维度/指标定义,在 HBase 中创建对应的 Cube 表(表名通常以
KYLIN_开头); - 向该 HBase 表的元数据属性 中写入“协处理器配置”,指定 Jar 包的 HDFS 路径 + 要加载的处理器类;
- 触发 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 时,会:
- 从
hbase:meta表读取该表的协处理器配置; - 从 HDFS 下载指定路径的
kylin-coprocessor.jar到本地临时目录; - 通过
CoprocessorClassLoader加载 Jar 中的处理器类; - 若 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 集群的全局配置,是一种“非侵入式”的集成方式。
