美文网首页
Apache Kylin 跨集群迁移

Apache Kylin 跨集群迁移

作者: 六层楼那么高 | 来源:发表于2020-08-13 15:50 被阅读0次

0 背景

kylin 异地跨机房迁移,当前 kylin 使用情况如下:
项目数:2
cube 数:20+
总数据量:20 T+

迁移方案有多种,多次尝试后最终采用了第三种方式,见 1.3

1 迁移方案

1.1 hadoop discp 方式

hadoop discp HBase 数据到新的 Kylin 对应的 HBase 集群
bucket load hbase 表,自动创建的表只有表名和列信息,没有描述信息,而 kylin 的 segment 和 corprocessor 都存储在 表描述信息中,这种方式就 pass 了

1.2 HBase snapshot 方式

迁移内容

Kylin metadata 迁移

  • 方案 1 HBase kylin:kylin_metadata 表迁移
  • 方案 2 使用官方元数据备份脚本 $kylin_home/bin/metastore.sh backup

Kylin 预计算数据 迁移

梳理 kylin下所有的表,使用 hbase snapshot 迁移

1.创建快照,
命令:snapshot 'sourceTable', ‘snapshotName'snapshot

snapshot 'kylin:KYLIN_5OY4XONXMG', 'snapshot_kylin_KYLIN_5OY4XONXMG'`

2.使用 ExportSnapshot 命令将 HBase 集群的快照数据迁移到中转 HDFS 集群

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot_kylin_KYLIN_5OY4XONXMG -copy-to hdfs://namenodeIP:8020/hbasebackup/snapshot_kylin_KYLIN_5OY4XONXMG -mappers 16 -bandwidth 1024

3.中转集群降镜像数据导入 Kylin 对应的 HBase 集群

 hadoop fs -cp /hbasebackup/TestTable-snapshot1/.hbase-snapshot/TestTable-snapshot1 /hbase/.hbase-snapshot
 
 hadoop fs -cp /hbasebackup/TestTable-snapshot1/archive/data/kylin/TestTable /hbase/archive/data/kylin/

4.恢复快照

restore_snapshot  'snapshot-kylin_metadata'
enable 'snapshot-kylin_metadata'
  1. HBASE 表协处理器修改
    为了防止因为加载 coprocessor 原因导致 regionserver 挂掉的问题,可以增加下面的配置到 HBase
    hbase.coprocessor.abortonerror=false

通过 alter 修改协处理器配置,namespace 更新为当前集群


image.png

更新 coprocessor(升级更新)
$KYLIN_HOME/bin/kylin.sh org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI default all

这种方式一个是较为复杂,二个是迁移导出数据涉及多次中转,担心数据完整性问题。

1.3 只迁移元数据方式

1.3.1 迁移项目、用户、acl 数据

  1. 在源 kylin 集群备份元数据,这里选择全部备份
bin/metastore.sh backup

导出的数据入下图:


image.png

备份处理大概 20g,为啥这么大,主要数据在 dict 目录,存放字典数据;

  1. 拷贝备份的元数据到新集群
    将备份的元数据的 project user acl table_acl 目录拷贝到新创建的目录
    mkdir meta_new
    cp -r acl table_acl project user meta_new
    bin/metastore.sh restore /path/to/meta_new

如果中途出现问题可以执行
bin/metastore.sh reset 重置元数据

至此,恢复了项目用户相关的数据。

1.3.2 cube + models 元数据迁移

这一步迁移 cube 元数据,不带 segment 相关信息。
最开始我使用 metastore.sh 只恢复 cube_desc、mode_desc 的方式是不成功的。
调研后发现可以使用 kylin 官方提供的 java 工具包:CubeMetaExtractor 和 CubeMetaIngester

写个脚本批量导出待迁移项目下所 cube 元数据信息,导出命令如下:

./bin/kylin.sh org.apache.kylin.tool.CubeMetaExtractor -cube querycube -destDir /root/newconfigdir1 -includeSegments false

导出的数据如下:

  • cube_desc: 是 cube 的配置元数据
  • cube: 是 cube 的基本数据,状态信息 uuid owner 等,不带 segment dict 数据(全量导出的备份里面有 segment 信息)
  • mode_desc : model 元数据
  • table:涉及的 hive 表
  • table_exd : hive 表基本数据,列基数等


    image.png

注意:

  1. includeSegments false:是导出不带 segment 信息的元数据,我们需要纯净的 cube 信息,这里要配置为 false。
  2. 这里导出的 zip 需要处理下, 由于导出的 zip 包内没有包一层父级目录,而在导入的时候需要,不然会报错。看了下源码,这里做了校验,解压出来后如果文件列表大于 1 会报错。

所以这里的处理是:先解压到一个目录,再重新打包

先解压到指定目录:unzip xx.zip -d xx
重新压缩:zip -r -q -o xx.zip xx

将重新压缩的包远程拷贝到集群 2 ,执行 cube meta 导入命令:

./bin/kylin.sh org.apache.kylin.tool.CubeMetaIngester -project rd -srcPath /root/newconfigdir1/cubes.zip

这里必须指定项目名,所以 第一步需要先导入或者创建项目

进 web ui reload 元数据,cube model 信息全都出来了。

1.3.3 批量构建 cube 恢复历史数据

提取源项目 cube 的元数据中的 segment 信息,可以通过脚本批量构建 cube。

参考:
https://blog.bcmeng.com/post/kylin-migrate.html
https://zhuanlan.zhihu.com/p/100259339
https://cloud.tencent.com/developer/article/1078240

相关文章

网友评论

      本文标题:Apache Kylin 跨集群迁移

      本文链接:https://www.haomeiwen.com/subject/ydtidktx.html