Trafodion 使用HBase snapshot方式迁移单表
来源:互联网 发布:mac系统字体库 编辑:程序博客网 时间:2024/06/05 06:18
在前面的一篇文章中,我们介绍了如何使用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 shellhbase(main):002:0> list 'TRAFODION.SEABASE.TEST_SNAPSHOT'TABLETRAFODION.SEABASE.TEST_SNAPSHOT=> ["TRAFODION.SEABASE.TEST_SNAPSHOT"]hbase(main):003:0> snapshot 'TRAFODION.SEABASE.TEST_SNAPSHOT','t_snapshot'0 row(s) in 0.3830 secondshbase(main):004:0> list_snapshotsSNAPSHOT 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 16drwxr-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 archivedrwxr-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 /tmpsudo -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中查看到snapshothbase(main):003:0* list_snapshotsSNAPSHOT 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 shellhbase(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.
- Trafodion 使用HBase snapshot方式迁移单表
- Trafodion 单表迁移
- 使用HBase Snapshot恢复Trafodion误删数据
- Trafodion 使用snapshot扫描大表
- Trafodion访问原生HBase表
- Trafodion 查看原生HBase表
- hbase数据迁移方式
- Trafodion表与HBase表如何映射
- Trafodion表与HBase表的关系
- 从HBase删除所有Trafodion表
- HBase Snapshot
- HBase Snapshot
- Trafodion 使用Hadoop命令修改Trafodion表的副本数
- Hbase表备份——Snapshot
- trafodion表元数据破坏,hbase数据正常情况下恢复trafodion表数据步骤
- hbase 表数据迁移
- hbase 表数据迁移
- hbase 表数据迁移
- 超平面与线性可分
- oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集
- Android自定义圆形进度条
- java 练习总结 js
- Oracle SQL 事务及触发器
- Trafodion 使用HBase snapshot方式迁移单表
- C语言必背18个经典程序
- OMRON plc连接电脑
- Mockplus设计大赛获奖选手专访 | 千人静听:千人千面的音乐推荐与分享APP
- 2017-12-18
- 0001
- android viewmodel 数据刷新异常
- Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)
- 【cs229】斯坦福机器学习笔记(一)