’, ‘<snapshot_name>’
将快照拷贝到目标 HDFS(跨集群)
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot <snapshot_name> \
-copy-from hdfs://src-nn:8020/hbase \
-copy-to hdfs://dst-nn:8020/hbase \
-mappers <map数>
目标集群恢复快照到新表或原表
hbase shell
clone_snapshot ‘<snapshot_name>’, ‘<target_table>’
或 restore_snapshot(覆盖原表,谨慎)
说明:快照轻量、停机影响小;跨集群拷贝依赖 HDFS 网络与权限。
三、异构数据源与文件导入导出
- TSV/CSV 文件导入 HBase(ImportTsv)
- 准备 TSV 文件(列顺序与表列族/列对应),在 HBase Shell 建表后执行:
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator=‘,’ \
-Dimporttsv.columns=HBASE_ROW_KEY,cf:col1,cf:col2 \
<target_table> <hdfs_tsv_path>
- 适合初始批量导入与小中体量数据装载。
- 从 HBase 导出到关系型数据库
- 方案 A:用 Export 导出到 HDFS,再由 Sqoop export 写入 MySQL/PG/Oracle;
- 方案 B:通过 Apache Phoenix 执行 SQL 查询并导出为 CSV,再入库;
- 方案 C:编写 MapReduce/Spark 作业自定义转换与导出。
说明:Sqoop/Phoenix 提供更高层抽象,适合ETL 场景。
四、性能与一致性要点
- 性能优化
- 提升扫描缓存:-Dhbase.client.scanner.caching=500(视内存与延迟权衡);
- 提高并发:-Dmapreduce.local.map.tasks.maximum=16(单机本地 MR 时),或保证足够 YARN 容器;
- 关闭预测执行:-Dmapred.map.tasks.speculative.execution=false,避免重复写入;
- 目标表预分裂(按预估 rowkey 分布)与合理 Region 数量,可显著提升 Bulk Load/CopyTable 速度;
- 大表优先 Snapshot/ExportSnapshot + Bulk Load,减少在线写入压力。
- 一致性与限制
- CopyTable/Export/Import 基于 Scan,导出期间写入的数据可能不被包含;用 starttime/endtime 做时间窗口导出,或先停写再迁移;
- DistCp 拷贝底层文件需停写,恢复后用 hbck -fixAssignments -fixMeta 修复分配与元数据;
- Replication 为最终一致性,适合容灾与持续同步,不适合一次性迁移;
- 跨版本导入:如从 0.94 导出到 0.96+,Import 需加 -Dhbase.import.version=0.94。
五、快速命令清单
- 导出到 HDFS:hbase org.apache.hadoop.hbase.mapreduce.Export
<hdfs_path> [ ]
- 导入(普通):hbase org.apache.hadoop.hbase.mapreduce.Import
<hdfs_path>
- 导入(Bulk Load):先 HFileOutputFormat2 生成 HFile,再 LoadIncrementalHFiles <hfiles_path>
- CopyTable(跨集群):hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zk:2181:/hbase
- Snapshot 迁移:snapshot ‘’,‘
’; hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot -copy-from -copy-to -mappers ; 目标端 clone_snapshot ‘’,‘’
- 校验:hbase shell 中 list、scan ‘