温馨提示×

HBase数据迁移Debian步骤

小樊
40
2025-12-09 05:49:16
栏目: 智能运维

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 对比抽样校验。

三 方式二 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 复制到 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
  • 生成 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.LoadIncrementalHFiles /user/hbase/hfile_tmp testtable
  • 校验
    • scan 抽样检查列值与时间戳。

六 关键注意事项与常见问题

  • 版本与兼容性
    • 跨大版本迁移优先用 Export/Import;同版本优先 CopyTable;物理拷贝需谨慎评估兼容性。
  • 表结构与列族
    • 目标表需预先创建且列族名称/配置一致;CopyTable/Export-Import 不会自动变更列族属性。
  • 一致性与停机窗口
    • 物理拷贝与全量导入建议在停机或只读窗口进行;CopyTable 可在窗口内滚动执行以减少影响。
  • 数据一致校验
    • 迁移后对比 countRowKey 区间样本重要列族数据;必要时抽样导出再比对。
  • 性能与资源
    • 迁移为 MapReduce 作业,注意 YARN/MR 队列资源压缩扫描缓存参数调优;大表可分片/分批执行。
  • HDFS 权限与路径
    • 确保 HDFS 权限目标路径正确;跨集群复制使用 DistCp 时检查 NameNode/端口与带宽。

0