HBase集群间数据迁移
0. 前置
HBase集群 | HDFS |
---|---|
Cluster-A | hdfs:/A |
Cluster-B | hdfs:/B |
Cluster-A集群数据迁移到Cluster-B
1. Export/Import
将Cluster-A
中HBase表export
到Cluster-B
的HDFS中,然后在Cluster-B
中使用import
导入HBase
a) Cluster-A和Cluster-B网络通
- Cluster-B中建好相关迁移的表
hbase(main):001:0>create 'TestTable', 'info'
- Cluster-A中执行Export命令
sudo su hdfs
hbase org.apache.hadoop.hbase.mapreduce.Driver export TestTable hdfs://B:9000/hbase_tmp
- Cluster-B中执行Import命令
sudo su hdfs
hbase org.apache.hadoop.hbase.mapreduce.Driver import TestTable hdfs://B:9000/hbase_tmp
- 清理Cluster-B的HDFS中临时文件夹/hbase_tmp
hadoop fs -rmr /hbase_tmp
b) Cluster-A和Cluster-B网络不通
网络不通的情况下,可以将数据Export到OSS中,然后从OSS中Import
- Cluster-B中建好相关迁移的表
hbase(main):001:0>create 'TestTable', 'info'
- Cluster-A中执行Export命令导出到OSS
sudo su hdfs
hbase org.apache.hadoop.hbase.mapreduce.Driver export TestTable oss://$bucket/$path
- Cluster-B中执行Import命令
sudo su hdfs
hbase org.apache.hadoop.hbase.mapreduce.Driver import TestTable oss://$bucket/$path
- 清理OSS中临时文件夹
2. distcp
将Cluster-A中HDFS的表文件distcp拷贝到Cluster-B的HBase在HDFS中对应的目录
- Cluster-A中将HBase的表在HDFS存储文件distcp到Cluster-B的HBase在HDFS中对应的目录(hdfs账户)
sudo su hdfs
hadoop distcp /hbase/data/default/* hdfs://B:9000/hbase/data/default
备注:
/hbase/data/default
是E-MapReduce中HBase表在HDFS存储路径,例如表TestTable
的存储路径是/hbase/data/default/TestHbase
, 可以只有单个表的路径,也可以是default下面所有表的路径(即*表示)
- Cluster-B中执行HBase repair修复(hdfs账户)
sudo su hdfs
hbase hbck -repair