注意:kylin会修改hbase,之后hbase启动需要加载 HDFS 的 kylin-coprocessor-3.1.2-0.jar 作者:马育民 • 2025-12-08 16:50 • 阅读:10006 # 说明 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: [](https://www.malaoshi.top/upload/0/0/1GW2NClyKUMR.png) --- # 详细解释 ### 一、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`)。 ```bash # 查看 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 # 进入 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 包 ```bash # 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 路径/版本: ```properties # 旧配置 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 # 进入 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:重启相关服务 ```bash # 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 集群的全局配置,是一种“非侵入式”的集成方式。 原文出处:http://www.malaoshi.top/show_1GW2MyqjPoyT.html