Trafodion 使用HBase snapshot方式迁移单表

在前面的一篇文章中,我们介绍了如何使用Trafodion自带的UNLOAD功能进行数据导出以及使用odb工具进行数据导入,合起来完成两个不同的Trafodion集群之间(即便是网络不联通情况)的单表迁移工作,详情请参考博客: http://blog.csdn.net/post_yuan/article/details/72964165

然而,此种方式需要把数据先导成为文本文件(可能为压缩格式)然后再用odb导入,因此在数据中有特殊字符时如换行符等情况下可能会造成导出的文本文件格式错位。遇到此种情况,可能需要我们在做UNLOAD导出时先做特殊字符的替换工作,诸如replace(replace(ID,chr(10),”),chr(13),”)此类,另外我们还需要考虑导出的文件的分隔符不能存在于数据中,假设数据中包括’|’这样的特殊字符,然后UNLOAD语句中的DELIMITER设置为’|’则会导致导出错位的问题。

作为另外一种Trafodion迁移单表的替代方案,本文中我们使用HBase的snapshot方式。实际上,Trafodion的离线备份还原使用的也是这种方式,只不过,在当前的Trafodion版本中,尚不支持单表或者Schema级别的备份恢复。使用此方法做表迁移时,读者需要有基本的HBase snapshot原理的知识,如果您还不熟悉,建议先了解一下什么是HBase snapshot以及HBase snapshot的常用命令,本文在此不做详述。下面我会通过具体步骤介绍如何实现利用snapshot迁移单表数据。

假设我们已经有两个Trafodion集群A和B,步骤如下,

1 在集群A中使用trafci创建测试表并插入测试数据

>>create table test_snapshot(a int, b varchar(10));

--- SQL operation complete.
>>insert into test_snapshot values(1,'ABC'),(2,'DEF'),(3,'GHI');

--- 3 row(s) inserted.
>>select * from test_snapshot;

A            B
-----------  ----------

          1  ABC
          2  DEF
          3  GHI

--- 3 row(s) selected.

2 在集群A中从hbase shell中查看表并创建snapshot

hbase shell
hbase(main):002:0> list 'TRAFODION.SEABASE.TEST_SNAPSHOT'
TABLE
TRAFODION.SEABASE.TEST_SNAPSHOT

=> ["TRAFODION.SEABASE.TEST_SNAPSHOT"]
hbase(main):003:0> snapshot 'TRAFODION.SEABASE.TEST_SNAPSHOT','t_snapshot'
0 row(s) in 0.3830 seconds
hbase(main):004:0> list_snapshots
SNAPSHOT                                          TABLE + CREATION TIME
 t_snapshot                                       TRAFODION.SEABASE.TEST_SNAPSHOT (Mon Dec 18 11:11:50 +0800 2017)

=> ["t_snapshot"]

3 在集群A中使用hbase的ExportSnapshot工具把snapshot导出到本地目录
(注:导出路径可以为本地路径,也可以是HDFS路径,此处使用本地路径,省略从HDFS路径get的操作,另外,如果两个集群可以相互连通,可以直接指定目标集群的HDFS路径把文件导出到目标集群)

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot t_snapshot -copy-to /unload/TEST_SNAPSHOT -mappers 16
//导出后可以在本地看到对应目录
ls -la /unload/TEST_SNAPSHOT/
total 16
drwxr-xr-x 4 root root 4096 Dec 18 11:37 .
drwxr-xr-x 3 root root 4096 Dec 18 11:37 ..
drwxr-xr-x 3 root root 4096 Dec 18 11:37 archive
drwxr-xr-x 4 root root 4096 Dec 18 11:37 .hbase-snapshot

4 使用工具把导出文件夹拷贝至集群B(略)

5 在集群B中使用hbase的ExportSnapshot工具把snapshot导入到集群B的HDFS /hbase目录
(注:/hbase是CDH hadoop默认的hbase的目录,如果是HDP hadoop,此默认应该修改为/apps/hbase/data)

hadoop fs -put /unload/TEST_SNAPSHOT /tmp
sudo -u hbase hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot t_snapshot -copy-from hdfs://bigdata001.hadoop.com:8020/tmp/TEST_SNAPSHOT -copy-to hdfs://bigdata001.hadoop.com:8020/hbase -mappers 16
//导入后可以在hbase shell中查看到snapshot
hbase(main):003:0* list_snapshots
SNAPSHOT                                          TABLE + CREATION TIME
 t_snapshot                                       TRAFODION.SEABASE.TEST_SNAPSHOT (Mon Dec 18 11:11:50 +0800 2017)
1 row(s) in 0.5400 seconds

=> ["t_snapshot"]

6 在集群B中使用trafci创建相同的表结构

>>create table test_snapshot(a int, b varchar(10));

--- SQL operation complete.

7 在集群B中从hbase shell中删除表并通过snapshot方式恢复数据

hbase shell

hbase(main):009:0> disable 'TRAFODION.SEABASE.TEST_SNAPSHOT'

hbase(main):010:0> drop 'TRAFODION.SEABASE.TEST_SNAPSHOT'

hbase(main):010:0> clone_snapshot 't_snapshot','TRAFODION.SEABASE.TEST_SNAPSHOT'

8 在集群B中使用trafci检查数据迁移是否成功

>>select * from test_snapshot;

A            B
-----------  ----------

          1  ABC
          2  DEF
          3  GHI

--- 3 row(s) selected.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值