HBase数据迁移Debian步骤
导读:HBase 数据迁移到 Debian 环境的实操步骤 一 迁移方式选型 离线拷贝 Region 目录(物理迁移):适合整库/整表迁移或跨大版本升级,速度快、可控性强,但要求表在迁移时处于一致状态并做一致性修复。 Export/Import...
HBase 数据迁移到 Debian 环境的实操步骤
一 迁移方式选型
- 离线拷贝 Region 目录(物理迁移):适合整库/整表迁移或跨大版本升级,速度快、可控性强,但要求表在迁移时处于一致状态并做一致性修复。
- Export/Import MapReduce 工具:适合跨集群、跨网络的标准化迁移,支持按时间/版本/列族过滤,迁移过程可并行、可断点。
- CopyTable:同版本或兼容版本集群间的在线/近实时复制,适合不停写场景的增量同步或一次性全量拷贝。
- ImportTsv + LoadIncrementalHFiles:面向文本/CSV 等外部数据的高效批量导入,先生成 HFile 再挂载到表,写入性能最佳。
二 方式一 离线拷贝 Region 目录(物理迁移)
- 前置检查
- 确认 HBase 版本与表结构在源/目标一致;目标集群 HDFS 可用空间充足;网络带宽与稳定性满足大文件传输。
- 建议对目标表进行预创建(列族一致),或按后文步骤由 hbck 自动修复元数据。
- 源集群操作
- 刷新落盘并进入维护态:
- hbase shell: disable ‘tableName’
- hbase shell: flush ‘tableName’
- 拷贝表目录到本地(示例以 default 命名空间为例):
- hdfs dfs -get /hbase/data/default/tableName ./tableName
- 压缩归档便于传输:tar -zcvf tableName.tar tableName
- 刷新落盘并进入维护态:
- 传输到 Debian
- 将 tableName.tar 复制到 Debian 主机(scp/rsync 等)。
- 目标集群操作
- 解压并上传到 HDFS 对应目录:
- tar -zxvf tableName.tar
- hdfs dfs -put tableName /hbase/data/default/
- 修复元数据与分配 Region:
- hbase hbck -fixTableOrphans tableName
- hbase hbck -fixMeta tableName
- hbase hbck -fixAssignments tableName
- hbase hbck -repair tableName
- 验证:hbase shell 中 scan ‘tableName’, { LIMIT => 10} 与 count 对比抽样校验。
- 解压并上传到 HDFS 对应目录:
三 方式二 Export/Import MapReduce 工具(推荐跨网络)
- 源集群导出
- 全量导出到 HDFS(可按需加过滤参数):
- hbase org.apache.hadoop.hbase.mapreduce.Export my_table /tmp/my_table_export
- 常用可选参数(示例):
- -D hbase.mapreduce.scan.row.start=…、-D hbase.mapreduce.scan.row.stop=…
- -D hbase.mapreduce.scan.column.family=cf
- -D hbase.client.scanner.caching=100
- -D mapred.output.compress=true、-D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec
- 全量导出到 HDFS(可按需加过滤参数):
- 将导出目录从源 HDFS 复制到 Debian 上的目标 HDFS(如使用 DistCp)
- hadoop distcp hdfs://src-nn:8020/tmp/my_table_export hdfs://debian-nn:8020/tmp/my_table_export
- 目标集群导入
- 目标表需先存在(列族一致):create ‘my_table’, ‘cf’
- 导入数据:
- hbase org.apache.hadoop.hbase.mapreduce.Import my_table /tmp/my_table_export
- 若需先生成 HFile 再批量加载(性能更佳):
- 导入时加参数:-D import.bulk.output=/tmp/my_table_hfile
- 批量加载:hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/my_table_hfile my_table
- 校验
- 对比源/目标表的行数、重要 Key 区间样本、列族覆盖度。
四 方式三 CopyTable 在线/近实时复制(同版本优先)
- 适用场景
- 同版本或兼容版本的 HBase 集群间迁移/同步;需要在迁移窗口内尽量保持业务写入。
- 基本步骤
- 目标集群先建表(列族一致):create ‘target_table’, ‘cf’
- 全量复制:
- hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=target_table source_table
- 如需持续同步增量,可在业务低峰期多次执行或结合时间戳/版本窗口参数控制扫描范围(CopyTable 支持 Scan 参数)。
- 校验
- 抽样对比 count/Key 区间/列族数据一致性。
五 方式四 ImportTsv 批量导入 CSV/TSV(外部数据或落地文件)
- 建表
- create ‘testtable’, ‘cf1’,‘cf2’
- 准备数据并上传 HDFS
- 示例 CSV(逗号分隔):1,tom,m
- hdfs dfs -put data.txt /user/hbase/import/
- 直接导入(经 MapReduce Put)
- hbase org.apache.hadoop.hbase.mapreduce.ImportTsv
-Dimporttsv.separator=‘,’
-Dimporttsv.columns=HBASE_ROW_KEY,cf1,cf2
testtable /user/hbase/import/data.txt
- hbase org.apache.hadoop.hbase.mapreduce.ImportTsv
- 生成 HFile 再批量加载(高性能)
- 生成 HFile:
- hbase org.apache.hadoop.hbase.mapreduce.ImportTsv
-Dimporttsv.separator=‘,’
-Dimporttsv.columns=HBASE_ROW_KEY,cf1,cf2
-Dimporttsv.bulk.output=/user/hbase/hfile_tmp
testtable /user/hbase/import/data.txt
- hbase org.apache.hadoop.hbase.mapreduce.ImportTsv
- 批量加载:
- hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /user/hbase/hfile_tmp testtable
- 生成 HFile:
- 校验
- scan 抽样检查列值与时间戳。
六 关键注意事项与常见问题
- 版本与兼容性
- 跨大版本迁移优先用 Export/Import;同版本优先 CopyTable;物理拷贝需谨慎评估兼容性。
- 表结构与列族
- 目标表需预先创建且列族名称/配置一致;CopyTable/Export-Import 不会自动变更列族属性。
- 一致性与停机窗口
- 物理拷贝与全量导入建议在停机或只读窗口进行;CopyTable 可在窗口内滚动执行以减少影响。
- 数据一致校验
- 迁移后对比 count、RowKey 区间样本、重要列族数据;必要时抽样导出再比对。
- 性能与资源
- 迁移为 MapReduce 作业,注意 YARN/MR 队列资源、压缩与扫描缓存参数调优;大表可分片/分批执行。
- HDFS 权限与路径
- 确保 HDFS 权限与 目标路径正确;跨集群复制使用 DistCp 时检查 NameNode/端口与带宽。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: HBase数据迁移Debian步骤
本文地址: https://pptw.com/jishu/766837.html
