在 Linux 环境下,HBase 的备份方式主要取决于你是「全量备份」「增量备份」还是「迁移需求」。下面按常用程度给你系统讲一下。
hbase shell
snapshot '表名', '快照名'
示例:
snapshot 'user_table', 'user_table_snap_20260121'
list_snapshots
disable 'user_table'
restore_snapshot 'user_table_snap_20260121'
enable 'user_table'
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot user_table_snap_20260121 \
-copy-to hdfs://backup-cluster:8020/hbase \
-copy-from hdfs://prod-cluster:8020/hbase
✅ 优点:
hbase org.apache.hadoop.hbase.mapreduce.Export \
user_table \
hdfs:///backup/user_table_20260121
恢复:
hbase org.apache.hadoop.hbase.mapreduce.Import \
user_table \
hdfs:///backup/user_table_20260121
⚠️ 缺点:
stop-hbase.sh
hdfs dfs -copyToLocal /hbase /backup/hbase_20260121
或远程:
hdfs dfs -distcp hdfs://prod/hbase hdfs://backup/hbase
✅ 适合:
❌ 不适合:
add_peer '1', 'zk-remote:2181:/hbase'
enable_table_replication 'user_table'
✅ 适合:
| 场景 | 推荐方案 |
|---|---|
| 单表备份 | 快照 |
| 跨集群 | ExportSnapshot |
| 灾备 | HDFS distcp |
| 实时容灾 | Replication |
| 迁移 | Export / Snapshot |
#!/bin/bash
TABLE=user_table
SNAP=${TABLE}_$(date +%Y%m%d)
hbase shell <<EOF
snapshot '${TABLE}', '${SNAP}'
EOF
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot $SNAP \
-copy-to hdfs://backup:8020/hbase
如果你愿意,可以告诉我:
我可以给你最合适的备份方案 + 脚本。