HBase在Debian上的数据迁移方案
/hbase)及备份目录的属主为hbase用户(sudo chown -R hbase:hbase /usr/local/hbase/data),避免权限问题导致迁移失败。快照是HBase的原生时间点备份工具,通过HDFS硬链接实现,几乎不占用额外空间,且创建/恢复速度快。
snapshot '快照名', '表名'(如snapshot 'user_snapshot', 'user_table'),生成表的逻辑快照。hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot命令将快照复制到目标集群HDFS,例如:hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot user_snapshot -copy-to hdfs://target-namenode:9000/hbase_snapshot。restore_snapshot '快照名'(如restore_snapshot 'user_snapshot'),将快照恢复为目标表。scan '表名',对比源表数据一致性。通过MapReduce将表数据导出为SequenceFile格式,再导入目标集群,适用于数据量较小(如TB级以下)的场景。
hbase org.apache.hadoop.hbase.mapreduce.Export '表名' 'HDFS导出路径'(如hbase org.apache.hadoop.hbase.mapreduce.Export 'user_table' '/export/user_table'),将表数据转换为SequenceFile并存入HDFS。hdfs dfs -put /export/user_table /target_export)。hbase org.apache.hadoop.hbase.mapreduce.Import '表名' 'HDFS导入路径'(如hbase org.apache.hadoop.hbase.mapreduce.Import 'user_table' '/target_export'),将数据导入目标表。count '表名',确认数据量与源表一致。通过MapReduce直接扫描源表并复制数据到目标表,无需经过HDFS中转,适合需要实时同步的场景(但会对源集群造成一定压力)。
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --src='源表名' --dest='目标表名' --peer.adr='目标集群ZK地址:2181:/hbase'(如hbase org.apache.hadoop.hbase.mapreduce.CopyTable --src='user_table' --dest='user_table_target' --peer.adr='zk1:2181:/hbase'),将源表数据实时复制到目标集群的目标表。scan '目标表名',检查数据是否与源表一致。通过Hadoop DistCp工具直接复制HBase数据文件(HFiles),适合大规模集群间的数据迁移(如PB级数据),效率高。
hdfs://source-namenode:9000/hbase与hdfs://target-namenode:9000/hbase)。hadoop distcp hdfs://source-namenode:9000/hbase/data/default/表名 hdfs://target-namenode:9000/hbase/data/default/表名,复制源集群HBase数据文件到目标集群。load '表名',将复制的HFiles加载到目标表。scan '表名',确认数据完整性。scan '表名'(检查数据内容)、count '表名'(检查数据量)、describe '表名'(检查表结构),确保与源表一致。/var/log/hbase/),确认无ERROR或WARN级别的错误。/export/user_table、HDFS上的快照临时目录),释放存储空间。hbase-site.xml中配置hbase.replication为true,并添加目标集群的ZK地址),或在迁移后使用CopyTable工具同步增量数据。