Debian下HBase数据迁移步骤
一 方案选择与适用场景
- ExportSnapshot 快照迁移(推荐):对线上影响最小,适合跨版本/跨集群迁移,迁移的是表元数据与HFile的引用,通过MR在后台搬运底层文件,业务几乎无感知。要求源集群开启快照(hbase.snapshot.enabled=true)。
- CopyTable:基于MapReduce对表进行扫描并写入目标表,适合在线迁移/小中体量(<10T)或需要做时间窗/行键范围迁移的场景;对源集群有一定读压力。
- Export/Import:先Export为顺序文件(可指定时间窗/版本),再Import到目标表,适合跨版本或需要离线阶段导入的场景。
- DistCp + LoadIncrementalHFiles:先停写并Flush,DistCp直拷HFile到目标HDFS,再用LoadIncrementalHFiles装载,适合大体量且可接受短暂停写的迁移。
- Replication 复制:配置主从复制实现近实时同步,适合持续双写到新集群后做一次性切换的过渡方案。
二 标准步骤 ExportSnapshot(推荐)
- 前置检查
- 确认源集群已开启快照:在 hbase shell 执行list_snapshots;若未开启,在hbase-site.xml中设置hbase.snapshot.enabled=true并重启相关服务。
- 两集群网络互通,目标集群HDFS可写,且运行迁移任务的账号对HBase与HDFS具备读写/授权权限(Kerberos环境需统一票据或按安全策略配置)。
- 源集群
- 可选:对表执行flush ‘table’,减少未落盘数据。
- 创建快照:hbase shell 执行snapshot ‘snap_xxx’, ‘table’;确认快照就绪(list_snapshots)。
- 拷贝快照到目标HDFS:使用ExportSnapshot(建议以hdfs用户执行)
- 示例:hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snap_xxx -copy-to hdfs://dst-nn:8020/apps/hbase/data [-overwrite]
- 目标集群
- 修正权限(如需要):hdfs dfs -chmod -R 777 /apps/hbase/data;hdfs dfs -chown -R hbase:hdfs /apps/hbase/data
- 按源表结构创建同名表(列族、版本、压缩、TTL等保持一致):hbase shell 执行 create ‘table’, {NAME => ‘cf’, …}
- 恢复快照:hbase shell 执行 disable ‘table’ → restore_snapshot ‘snap_xxx’ → enable ‘table’
- 校验:count ‘table’、随机scan对比样本数据,必要时执行**major_compact ‘table’**合并小文件。
三 其他常见方式步骤
- CopyTable(在线/小中体量)
- 目标集群先建好同名同结构表(建议按region分布预分裂以提升写入速度)。
- 在源或具备源集群ZK的客户端执行:
- 示例:hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zk1,zk2,zk3:/hbase table
- 常用参数:-Dhbase.client.scanner.caching=200、-Dmapreduce.local.map.tasks.maximum=16、-Dmapred.map.tasks.speculative.execution=false
- 可按时间窗/行键迁移:–starttime=… --endtime=… 或 --startrow/–stoprow
- Export/Import(跨版本/离线)
- 源集群导出:hbase org.apache.hadoop.hbase.mapreduce.Export table hdfs://dst-nn:8020/export/table [versions] [starttime] [endtime]
- 目标集群先建表,再导入:hbase org.apache.hadoop.hbase.mapreduce.Import table hdfs://dst-nn:8020/export/table
- DistCp + LoadIncrementalHFiles(大体量/可短暂停写)
- 源集群停写并flush:flush ‘table’
- 拷贝HFile:hadoop distcp hdfs://src-nn:8020/hbase/data/default/table hdfs://dst-nn:8020/hbase/tmp/table
- 目标集群装载:hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://dst-nn:8020/hbase/tmp/table table
- 修复分配:hbase hbck -fixAssignments -fixMeta。
四 迁移前后校验与注意事项
- 一致性校验
- 行数对比:count 源表 vs 目标表;抽样scan对比关键行/列族;必要时校验版本数与TTL保留策略。
- 目标集群执行major_compact后再次校验,避免因小文件导致统计偏差。
- 版本与兼容性
- 两集群HBase/HDFS版本差异较大时,优先用ExportSnapshot/Export+Import;CopyTable对两端API/版本更敏感。
- 权限与安全
- 确保HDFS与HBase的ACL/所有者一致;Kerberos环境需票据互信或在两端按策略配置安全参数。
- 运行参数与性能
- CopyTable建议调大scanner caching、合理设置并发map数,并关闭推测执行以避免重复写入。
- 云环境与网络
- 云HBase常默认不开放HDFS端口,基于HDFS的DistCp/Snapshot可能不可用,可改用CopyTable或联系云厂商支持。