在 CentOS 上做 HBase 数据迁移的常用方法与步骤
一、方法速览与选型
| 方法 |
适用场景 |
停机要求 |
优点 |
关键命令 |
| Export/Import |
跨版本或一次性全量迁移 |
建议短暂停写 |
实现简单、可跨版本 |
Export: hbase org.apache.hadoop.hbase.mapreduce.Export ;Import: hbase org.apache.hadoop.hbase.mapreduce.Import
| ExportSnapshot |
同构集群、TB 级大表、尽量不停写 |
可不停写(建议 flush/短暂限流) |
对线上影响小、速度快 |
snapshot 'snap',hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snap -copy-to hdfs://dst/...,目标端 restore_snapshot 'snap' |
| CopyTable |
在线迁移/小中规模(<10T) |
可在线 |
配置简单、可增量 |
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zk1:2181:/hbase
| Replication |
持续近实时同步 |
不停写 |
持续复制、运维简单 |
add_peer '1','zkB:2181:/hbase'; alter 't',{NAME=>'cf',REPLICATION_SCOPE=>'1'}; start_replication |
| DistCp + Bulk Load |
离线大批量、可控窗口 |
需停写并 flush/disable |
极致吞吐、可控性强 |
hadoop distcp hdfs://src/hbase/... hdfs://dst/hbase/...,生成 HFile 后 LoadIncrementalHFiles |
说明:
- 云上或部分托管 HBase 默认不开放 HDFS 端口时,基于 HDFS 的 DistCp/Snapshot 可能不可用,可改用 CopyTable 或联系云厂商支持。
二、标准操作步骤
-
Export/Import(一次性全量)
- 源端导出:
hbase org.apache.hadoop.hbase.mapreduce.Export /hdfs/path/export
- 目标端导入:
hbase org.apache.hadoop.hbase.mapreduce.Import /hdfs/path/export
- 校验:
hbase shell 中 scan '', {LIMIT => 10} 或统计行数对比。
-
ExportSnapshot(推荐,低影响)
- 源端创建快照:
snapshot 'snap', ''
- 导出快照到目标 HDFS:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snap -copy-to hdfs://dst-nn:8020/hbase
- 目标端恢复:
restore_snapshot 'snap';必要时执行 major_compact '' 合并小文件。
-
CopyTable(在线迁移/小中规模)
- 目标端先建表(列族一致,建议按源表预分裂)
- 执行迁移:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zk1:2181:/hbase
- 增量/按时间:
--starttime=... --endtime=...;按列族:--families=cf1,cf2。
-
Replication(持续近实时)
- 源/目标均开启复制:
hbase.replication=true
- 添加复制对:
add_peer '1','zkB:2181:/hbase'
- 打开表级复制:
alter 't',{NAME=>'cf',REPLICATION_SCOPE=>'1'}
- 监控:
status 'replication';追平后 stop_replication。
-
DistCp + Bulk Load(离线大批量)
- 源端 flush/可选 disable:
flush '' 或 disable ''
- 拷贝 HFiles:
hadoop distcp -m 50 hdfs://src/hbase/data/default/ hdfs://dst/hbase/data/default/
- 生成 HFile(示例):
hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 \ -D hbase.table.name=
- 导入:
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles
- 校验与修复:
hbase hbck。
三、关键注意事项与最佳实践
-
版本与兼容性
- Export/Import 适合跨版本迁移;CopyTable/Replication 建议同版本或兼容版本使用。
-
一致性与窗口控制
- 尽量在业务低峰期操作;对在线表先 flush,大表迁移可 disable 后再拷贝;持续同步用 Replication 追平后切换。
-
性能与资源
- 提升 MapReduce 并行度(如
-m、mapreduce.job.maps)、合理设置 hbase.client.scanner.caching;避免预测执行导致重复写入。
-
HDFS 与权限
- 两集群间网络、端口(如 8020/9000/2181)、Kerberos/ACL 需互通;目标路径提前创建并赋权。
-
文件与清理
- 迁移完成后清理临时 HDFS 路径;快照/导出目录按策略保留;目标端导入后可 major_compact 减少小文件。
-
校验与回滚
- 迁移前后对比行数/校验和;使用
hbase hbck 修复 region 分配;保留回滚方案(快照/备份)。
四、快速命令清单(可直接复制)
-
Export/Import
# 源端
hbase org.apache.hadoop.hbase.mapreduce.Export /hdfs/export/
# 目标端
hbase org.apache.hadoop.hbase.mapreduce.Import /hdfs/export/
-
ExportSnapshot
# 源端
snapshot 'snap_', ''
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot snap_ \
-copy-to hdfs://dst-nn:8020/hbase
# 目标端
restore_snapshot 'snap_'
major_compact ''
-
CopyTable
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--peer.adr=zkB:2181:/hbase \
-Dhbase.client.scanner.caching=500 \
-
Replication
# 目标端开启复制
hbase shell
> add_peer '1','zkB:2181:/hbase'
> alter 't',{NAME=>'cf',REPLICATION_SCOPE=>'1'}
> start_replication
> status 'replication'
-
DistCp + Bulk Load
# 1) flush/disable(视窗口而定)
hbase shell
> flush ''
# > disable ''
# 2) 拷贝 HFiles
hadoop distcp -m 50 \
hdfs://src-nn:8020/hbase/data/default/ \
hdfs://dst-nn:8020/hbase/data/default/
# 3) 生成 HFile(示例)
hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 \
-D hbase.table.name= \
/hdfs/export/ /hdfs/hfiles/
# 4) 导入
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
/hdfs/hfiles/
# 5) 校验
hbase hbck
以上就是关于“HBase数据迁移在CentOS上怎么做”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm
声明: 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。
| |