常用的HBASE数据迁移目前的方案有非常多种,本文主要介绍两种一种为Hadoop手动数据迁移,另一种为Snapshot数据迁移
原理不多介绍,直接实战
一、Hadoop层手动数据迁移
需要注意:
1.Hadoop/hbase版本也要注意是否一致,如果版本不一致,最终load表时会报错
2.迁移实时写的表,最好是停止集群对表的写入,在以下方式需要迁移的表为Test
步骤说明:将需要迁移的数据表传输到临时目录,再copyFromLocal到hdfs修复元数据
第一步:新建个临时文件夹 /opt/hbaseDataTest/Test
第二步:在需要迁移的集群.hadoop/bin目录下 执行
./hadoop fs -copyToLocal /hbase/data/default/Test /opt/hbaseDataTest/Test
第三步:在目标的集群.hadoop/bin目录下 执行
./hadoop fs -copyFromLocal /opt/hbaseDataTest/Test /hbase/data/default/Test
第四步:在hbase/bin 执行
./hbase hbck -fixMeta 修复meta表数据
第五步: 在hbase/bin 执行
./hbase hbck -fixAssignments 重新分配数据到各个RegionServer
第六步:检查表数据是否OK
二. Snapshot数据迁移方式
HBase快照(snapshot)顾名思义就是在某个时刻对某个HBase表的数据做了快速备份,就像拍照一下,让数据停留在那个时刻不再变动,后面用来做数据的恢复或者迁移。HBase在0.94版本开始提供了快照功能,0.95版本以后默认开启快照功能。
HBase的snapshot其实就是一组metadata信息的集合(文件列表),通过这些metadata信息的集合,就能将表的数据回滚到snapshot那个时刻的数据。
简单概括HBase快照的使用场景如下:
1.HBase表的定期快速备份
2.升级前的HBase数据备份
3.集群间的数据迁移
4.构建测试环境数据
5.做数据恢复
迁移步骤
第一步:迁移snapshot
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot snapshot_src_table \
-copy-from hdfs://src-hbase-root-dir/hbase \
-copy-to hdfs://dst-hbase-root-dir/hbase \
-mappers 20 \
-bandwidth 1024
第二步:恢复snapshot
命令 :restore_snapshot ‘snapshotName’
备注:需要对表进行过disable才能进行restore_snapshot的操作,如果这个还在写入数据,需要采用第三步bulkload的方式导入
第三步:将snapshot使用bulkload的方式导入
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
-Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 \
hdfs://dst-hbase-root-dir/hbase/archive/datapath/tablename/filename tablename
备注:这种方式需要将所有的文件进行遍历并全部通过bulkload导入,上面的只是一个文件的导入,这种方式不需要disable表。
其他snapshot操作
1.创建snapshot : snapshot 'tableName', ‘snapshotName'
2.查看snapshot : list_snapshots
3.查找以alrm开头的snapshot : list_snapshots 'alrm.*'
4.删除snapshot: delete_snapshot 'snapshotName'
三、总结
本文介绍两种常用HBase数据迁移方案,总结起来:
Hadoop手动数据迁移: 比较简单坑比较少 ,比较大数据量效率可能比较低
Snapshot: 比较常用 , 应用灵活,采用快照技术,效率比较高
具体场景还是具体选择,想了解更多信息可以关注一下微信公众号,回复1024可以领取大数据学习资料,每日更新大数据学习文章。