hbase 表导入导出之离线迁移

  数据迁移
内容纲要

概要说明


面对一些重要数据,很多场景下都需要将数据仓库进行复制,这可以是整个数据库的更广泛级别,也可以是较小的级别。本案例将演示hbase 表数据离线迁移的步骤。

该方法适用于数据量较大的时候,需要将hdfs数据get到本地,操作期间要确保本地空间足够大。
该方法在hbase同版本、不同版本之间经测试都可以迁移数据,但最好是在同版本之间迁移。

详细说明


本案例介绍使用 离线迁移 的方式导入导出 hbase 数据,hbase相同版本、不同版本经测试都是可用的,该方法只需要3步:

  1. 在源集群上执行get 将hbase 数据文件获取到 HDFS 路径
  2. 将数据文件copy 到目标集群并 put 上传到HDFS
  3. 确保目标集群处于在线状态,进行在线修复操作
  4. hbase shell 验证数据是否正确迁移

注意:

  1. 以下所有操作必须是 hbase 用户来执行,如果是开了安全的集群,需要kinit hbase获取认证信息,如果是没开安全的集群,执行命令之前需要加上 sudo -u hbase
  2. 以下操作需要准备好TDH客户端,参考:准备TDH客户端环境

1、在源集群上执行get 将hbase 数据文件获取到 HDFS 路径

hbase的表数据默认在hdfs的 /hyperbase1/data/<database_name>/<table_name> 路径下:

file

hdfs dfs -get /hyperbase1/data/default/sqlbulkload_test_hbase .

hbase表数据从hdfs get到本地路径:

file

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

file

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 中建立映射表

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。