快照是HBase提供的轻量级数据备份机制,通过创建表的只读副本并导出至HDFS,再导入目标集群,适用于离线或低峰时段的大规模数据迁移(如TB级数据)。其优势在于数据一致性高(创建快照时冻结数据视图)、对源集群性能影响小(仅记录元数据变化)。
具体步骤:
hbase shell> snapshot 'source_table', 'snapshot_name'
;hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot_name -copy-to hdfs://target_namenode:port/hbase/snapshot_name
;hbase org.apache.hadoop.hbase.mapreduce.Import source_table hdfs://target_namenode:port/hbase/snapshot_name
。通过配置源集群与目标集群的WAL日志同步,实现增量数据的实时迁移,适用于需要业务连续性的在线迁移(如实时写入的业务表)。其优势在于无需停机、增量数据自动同步,但需提前创建目标表并设置REPLICATION_SCOPE=1
(开启列族复制)。
具体步骤:
hbase shell> add_peer 'peer1', 'zk1:2181,zk2:2181,zk3:2181:/hbase'
;hbase shell> alter 'source_table', {NAME => 'cf', REPLICATION_SCOPE => '1'}
;hbase shell> start_replication 'peer1'
。基于Hadoop MapReduce的高性能数据拷贝工具,适用于跨集群的大规模HDFS数据迁移(如HBase数据文件直接迁移)。其优势在于并行处理(利用集群资源加速)、支持断点续传,但需确保源、目标集群Hadoop版本兼容(避免RPC协议冲突)。
具体步骤:
hbase org.apache.hadoop.hbase.mapreduce.Export 'source_table' '/path/to/export'
;hadoop distcp hdfs://source_namenode:port/path/to/export hdfs://target_namenode:port/path/to/import
;hbase org.apache.hadoop.hbase.mapreduce.Import 'target_table' '/path/to/import'
。通过将数据预处理为HFile格式(HBase底层存储格式),再加载至目标集群,适用于高性能批量数据导入(如历史数据归档)。其优势在于绕过Write-Ahead Log(WAL)、大幅提升导入速度(比Insert操作快10倍以上),但需提前规划Region分布(避免热点问题)。
具体步骤:
hbase org.apache.hadoop.hbase.mapreduce.Export 'source_table' '/path/to/export'
;hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 -Dmapreduce.job.output.key.class=org.apache.hadoop.hbase.KeyValue -Dmapreduce.job.output.value.class=org.apache.hadoop.hbase.KeyValue -Dmapreduce.job.output.format=org.apache.hadoop.hbase.mapreduce.TableOutputFormat -Dhbase.table.name=target_table /path/to/export /path/to/hfiles
;hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dmapreduce.job.name='Load HFiles' -Dhbase.table.name=target_table /path/to/hfiles target_table
。确保源、目标集群的HBase版本一致或兼容(如0.98.x→1.2.x),避免因API或RPC版本差异导致迁移失败;同时确认底层HDFS版本兼容(如HBase 2.x需搭配HDFS 2.7+)。
ipc.client.fallback-to-simple-auth-allowed=true
(允许简单认证访问非Kerberos集群),避免认证失败;hbase
)和HDFS管理员账号(如hdfs
)一致,或为目标账号开通读写权限(如HBase ACL的RWXCA
权限)。hbase.zookeeper.quorum
配置正确),且防火墙开放相关端口(如HBase的60000-60020端口、ZooKeeper的2181端口);将大数据集按RowKey范围(如rowkey前缀
)、时间范围(如2025-01-01至2025-06-30
)或业务维度(如用户ID分段)划分为多个小批次,依次迁移。优势在于降低单次迁移压力、便于问题定位(若某批次失败,仅需重试该批次)。
对于在线迁移(如实时业务表),需在迁移前开启双写(业务同时写入源集群和目标集群)。可通过修改业务代码(如同时调用源、目标集群的Put接口)或使用HBase的Replication
功能(源集群写入后自动同步至目标集群),确保迁移期间的数据一致性。
迁移完成后,需通过抽样检查或工具验证确保数据完整性:
hbck
工具检查目标集群的Region分配、Meta表一致性(如hbase hbck -repair
修复不一致问题)。大规模数据迁移(如快照、DistCp)会占用大量网络带宽、CPU和磁盘I/O资源,建议在业务低峰时段(如凌晨2:00-6:00)进行,避免影响线上业务性能。
hbase snapshot
创建快照),若迁移失败,可快速恢复源集群数据,减少业务中断时间。确保目标集群有足够的存储空间(建议预留20%以上冗余)、内存(如HBase RegionServer的heap size
设置为16GB以上)、RegionServer数量(根据数据量调整,如每TB数据分配2-3个RegionServer),避免因资源不足导致迁移失败。