内容纲要
概要说明
面对一些重要数据,很多场景下都需要将数据仓库进行复制,这可以是整个数据库的更广泛级别,也可以是较小的级别。本案例将演示hbase 表数据离线迁移的步骤。
该方法适用于数据量较大的时候,需要将hdfs数据get到本地,操作期间要确保本地空间足够大。
该方法在hbase同版本、不同版本之间经测试都可以迁移数据,但最好是在同版本之间迁移。
详细说明
本案例介绍使用 离线迁移 的方式导入导出 hbase 数据,hbase相同版本、不同版本经测试都是可用的,该方法只需要3步:
- 在源集群上执行get 将hbase 数据文件获取到 HDFS 路径
- 将数据文件copy 到目标集群并 put 上传到HDFS
- 确保目标集群处于在线状态,进行在线修复操作
- hbase shell 验证数据是否正确迁移
注意:
- 以下所有操作必须是 hbase 用户来执行,如果是开了安全的集群,需要kinit hbase获取认证信息,如果是没开安全的集群,执行命令之前需要加上
sudo -u hbase
- 以下操作需要准备好TDH客户端,参考:准备TDH客户端环境
1、在源集群上执行get 将hbase 数据文件获取到 HDFS 路径
hbase的表数据默认在hdfs的 /hyperbase1/data/<database_name>/<table_name>
路径下:
hdfs dfs -get /hyperbase1/data/default/sqlbulkload_test_hbase .
hbase表数据从hdfs get到本地路径:
2、将数据文件copy 到目标集群并 put 上传到HDFS
将本地数据上传到hdfs的路径下,hdfs的路径是: /hyperbase1/data/<database_name>/<table_name>
,路径中的
hdfs dfs -put /root/mll/hbase_qianyi/sqlbulkload_test_hbase/sqlbulkload_test_hbase /hyperbase1/data/dys/sqlbulkload_test_hbase
3、确保目标集群处于在线状态,进行在线修复操作
通过下面两个命令进行在线修复:两个 shell 命令输出都会有一个 summary,第一个的status 可以忽略,第二个命令的 summary 输出 status 为 OK 即为修复成功;
$ hbase hbck -fixMeta -ignorePreCheckPermission sqlbulkload_test_hbase
Summary:
Table people_hyperbase_1000w is okay.
Number of regions: 0
Deployed on:
Table hbase:meta is okay.
Number of regions: 1
Deployed on: tdh6-162,60020,1608180153235
8 inconsistencies detected.
Status: INCONSISTENT
$ hbase hbck -fix -ignorePreCheckPermission sqlbulkload_test_hbase
Summary:
Table people_hyperbase_1000w is okay.
Number of regions: 7
2020-12-18 16:47:43,992 INFO zookeeper.ClientCnxn: EventThread shut down
Deployed on: tdh6-161,60020,1608180541699 tdh6-162,60020,1608180153235 tdh6-163,60020,1608180364282
Table hbase:meta is okay.
Number of regions: 1
Deployed on: tdh6-162,60020,1608180153235
0 inconsistencies detected.
Status: OK
说明:
- -fixMeta:尝试修复元信息问题
- -fix:尝试修复region分配问题
5、同步后确认数据是否导入成功
使用 hbase shell 查看数据是否完整;
hbase(main):000:1> count "sqlbulkload_test_hbase" ,{INTERVAL => 10000, CACHE => 50000}
...
10000000 row(s) in 112.7680 seconds
=> 10000000
PS: 如果希望通过 inceptor 访问,则需要在 inceptor 中建立映射表