在CentOS上执行HBase数据导入导出的常用方法
一、前置检查与准备
二、方法一 Export/Import MapReduce 工具(通用、跨集群)
hbase org.apache.hadoop.hbase.mapreduce.Export 'source_table' /backup/export/source_table
hadoop distcp -m 20 hdfs://src-nn:8020/backup/export/source_table \
hdfs://tgt-nn:8020/backup/import/source_table
hbase org.apache.hadoop.hbase.mapreduce.Import 'target_table' /backup/import/source_table
echo "scan 'target_table', {LIMIT => 10}" | hbase shell
三、方法二 快照与 ExportSnapshot(轻量、快速、便于离线迁移)
echo "snapshot 'source_table', 'snap_$(date +%F)'" | hbase shell
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot snap_2025-11-28 \
-copy-to hdfs://tgt-nn:8020/backup/snapshots/snap_2025-11-28
hbase org.apache.hadoop.hbase.snapshot.ImportSnapshot \
-snapshot snap_2025-11-28 \
-copy-to /hbase/.hbase-snapshot
echo "clone_snapshot 'snap_2025-11-28', 'target_table'" | hbase shell
# 或 restore_snapshot(覆盖同名表,谨慎)
四、方法三 Bulk Load 批量加载(超大数据量、性能优先)
hbase org.apache.hadoop.hbase.mapreduce.Export 'source_table' /backup/export/source_table
hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 \
-D mapreduce.job.output.key.class=org.apache.hadoop.hbase.KeyValue \
-D mapreduce.job.output.value.class=org.apache.hadoop.hbase.KeyValue \
-D hbase.table.name=target_table \
/backup/export/source_table /backup/hfiles/target_table
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
-D hbase.table.name=target_table \
/backup/hfiles/target_table target_table
echo "count 'target_table'" | hbase shell
五、方法四 实时复制 Replication(持续同步)
echo "add_peer 'peer1', 'zk1:2181:/hbase'" | hbase shell
echo "enable_table_replication 'source_table'" | hbase shell
echo "start_replication 'peer1'" | hbase shell
六、方法五 导出为 CSV 等平面文件(供外部系统使用)
echo "scan 'source_table', {FILTER => \"FirstKeyOnlyFilter()\", LIMIT => 100000}" \
| hbase shell \
| sed '1,/ROW/d' \
| sed '/^$/d' \
| awk -F'[:,]' '{printf "%s,%s,%s\n", $1, $3, $5}' \
> /backup/export/source_table.csv