说明
本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)。
背景
在大数据领域,数据量持续增长,数据类型和来源也变得越来越复杂。传统的数据仓库和分析工具很难满足大规模数据处理和实时分析的需求。为了解决这些问题,Apache Kylin应运而生。
Apache Kylin是一个开源的OLAP(在线分析处理)引擎,它基于Hadoop和Spark生态系统,提供了一个高性能、高可扩展性的分析平台。Kylin的核心功能是通过预计算技术将大规模数据集转化为多维数据立方体,从而实现亚秒级查询响应时间。此外,Kylin还支持SQL接口和多种BI工具,使得数据分析变得更加简便。
迁移方案图
1 源集群数据准备
1.1. 运行命令,重启 Kylin 服务器刷新缓存:
代码语言:javascript复制${KYLIN_HOME}/bin/sample.sh
1.2. 用默认的用户名和密码 ADMIN/KYLIN 登陆 Kylin 网站,选择 project 下拉框(左上角)中的learn_kylin
工程;
1.3. 选择名为kylin_sales_cube的样例 Cube,点击 "Actions" -> "Build",end时间选择一个在 2014-01-01 之后的日期(覆盖所有的 10000 样例记录),start时间用默认填写的; 1.4. 点击 "Monitor" 标签,查看 build 进度直至 100%;
1.5. 点击 "Insight" 标签,执行 SQLs,例如:
代码语言:javascript复制select part_dt, sum(price) as total_sold, count(distinct seller_id) as sellers from kylin_sales group by part_dt order by part_dt
结果如下图
2 数据迁移
2.1 hbase表迁移
若待迁移cube的hbase表中加载的协处理器是本集群的全路径时,需要修改路径信息 这里指路径中带了dfs.nameservices地址 EMR集群默认是全路径的,如下图绿框所示
若是全路径则需要修改jar包的路径到cos
代码语言:javascript复制cos地址:https://console.cloud.tencent.com/cos5
创建一个存储桶,示例如下图
并确保源集群和目标集群都能访问,分别在两个集群执行以下命令
代码语言:javascript复制hdfs dfs -ls cosn://xxx-12345/
若能查看cos内容,则正常
在源集群将协处理器的jar包上传到cos,如图二所示
代码语言:javascript复制hdfs dfs -cp /kylin/kylin_metadata/coprocessor/kylin-coprocessor-2.5.2-0.jar cosn://xxx-12345/
源集群hbase修改协处理器地址,进入hbase shell
代码语言:javascript复制卸载协处理器
alter 'KYLIN_15MHU5XCIY',METHOD=>'table_att_unset',NAME=>'coprocessor$1'
其中KYLIN_15MHU5XCIY是hbase表名,这里是demo中表名,实际换成自己的
加载新的协处理器
alter 'KYLIN_15MHU5XCIY','coprocessor'=>'cosn://xxxx-12345/kylin-coprocessor-2.5.2-0.jar|org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.CubeVisitService|1001|'
地址换成cos路径,执行后如下图所示(hbase master UI)
若源集群的hbase表中加载的协处理器不是本集群地址,则以上步骤可以省略
hbase表迁移 源集群hbase shell中执行(创建snapshot)
代码语言:javascript复制snapshot 'KYLIN_15MHU5XCIY', 'KYLIN_15MHU5XCIY_snapshot'
数据导入目标集群
代码语言:javascript复制hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot KYLIN_15MHU5XCIY_snapshot -copy-from hdfs://172.16.16.34:4007/hbase -copy-to hdfs://172.16.16.17:4007/hbase -mappers 10 -bandwidth 100
其中172.16.16.34:4007是源集群acitive nn的rpc地址(ip 端口),emr默认端口是4007
172.16.16.17:4007是目标集群的acitive nn的rpc地址
map个数和带宽根据实际情况调整
目标集群数据导入
代码语言:javascript复制进入目标集群的hbase shell,执行
list_snapshots
会显示snapshot信息,若下图所示
clone snapshot,继续在hbase shell里执行
clone_snapshot 'KYLIN_15MHU5XCIY_snapshot','KYLIN_15MHU5XCIY'
此时hbase数据迁移完成,在目标集群可以查看hbase表信息,和源集群完全一致
2.2 cube迁移
代码语言:javascript复制进入源集群的kylin的目录,执行
./bin/metastore.sh backup
完成后会在当前目录生成meta_backups目录,如下图所示
将该目录拷贝到目标集群
scp -r root@172.16.16.34:/usr/local/service/kylin/meta_backups ./
修改权限:chown -R hadoop.hadoop meta_backups/
目标集群导入元数据
代码语言:javascript复制/usr/local/service/kylin/bin/metastore.sh restore meta_2021_04_07_13_53_57
在kylin页面上进行点击System模块,点击reload MetaData
进入kylin目录执行
./bin/kylin.sh org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI /usr/local/service/kylin/lib/kylin-coprocessor-*.jar all
3 目标集群验证
点开目标集群的kylin web ui,可以查看新导入的cube
在Insight执行测试sql
代码语言:javascript复制select part_dt, sum(price) as total_sold, count(distinct seller_id) as sellers from kylin_sales group by part_dt order by part_dt
结果如下图所示
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!