1. 首页 > Hadoop教程 > 正文

大数据教程FG084-HBase数据迁移实战

本文档风哥主要介绍HBase数据迁移实战,包括Export/Import、DistCp、快照迁移等内容,风哥教程参考HBase官方文档Migration、Backup等内容,适合大数据开发运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 迁移概述

HBase数据迁移是将数据从一个HBase集群迁移到另一个集群的过程,支持多种迁移方式。学习交流加群风哥微信: itpux-com

HBase迁移场景:

  • 集群升级:从旧版本升级到新版本
  • 集群迁移:从旧集群迁移到新集群
  • 数据同步:跨集群数据同步
  • 数据备份:数据备份和恢复
# 迁移类型

1. 跨版本迁移
场景:HBase版本升级
方式:滚动升级、快照迁移
难度:中等

2. 跨集群迁移
场景:集群迁移、数据同步
方式:Export/Import、DistCp、快照
难度:高

3. 同集群迁移
场景:表迁移、命名空间迁移
方式:快照、CopyTable
难度:低

# 迁移方式

1. Export/Import
原理:导出数据到HDFS,再导入
优点:跨版本兼容性好
缺点:速度较慢
适用:小数据量、跨版本

2. DistCp
原理:HDFS文件复制
优点:速度快
缺点:需要停服
适用:大数据量、同版本

3. 快照迁移
原理:HBase快照导出导入
优点:速度快、支持增量
缺点:需要同版本
适用:大数据量、同版本

4. CopyTable
原理:MapReduce复制表数据
优点:在线迁移
缺点:速度慢
适用:小数据量、在线迁移

5. Replication
原理:主从复制
优点:实时同步
缺点:配置复杂
适用:实时同步

# 迁移流程

1. 迁移前准备
– 评估数据量
– 选择迁移方式
– 制定迁移计划
– 准备目标环境

2. 迁移执行
– 执行数据迁移
– 监控迁移进度
– 处理异常情况

3. 迁移验证
– 数据一致性验证
– 功能验证
– 性能验证

4. 迁移切换
– 应用切换
– 数据同步
– 旧环境清理

# 迁移架构

源集群 目标集群
┌─────────┐ ┌─────────┐
│ HBase │ │ HBase │
│ Cluster │ │ Cluster │
└────┬────┘ └────┬────┘
│ │
│ Export/DistCp │
│ Snapshot │
└────────────────────┘
迁移通道

1.2 迁移方式详解

迁移方式详解:

# Export/Import迁移

原理:
1. 使用Export导出表数据到HDFS
2. 使用Import从HDFS导入数据

特点:
– 跨版本兼容
– 支持增量导出
– 数据格式为SequenceFile

命令:
# 导出
hbase org.apache.hadoop.hbase.mapreduce.Export \
fgedu_user /backup/fgedu_user_export

# 导入
hbase org.apache.hadoop.hbase.mapreduce.Import \
fgedu_user /backup/fgedu_user_export

# DistCp迁移

原理:
1. 停止源集群写入
2. 使用DistCp复制HDFS数据
3. 启动目标集群

特点:
– 速度快
– 需要停服
– 同版本迁移

命令:
# 复制HBase数据
hadoop distcp \
hdfs://source-cluster/hbase \
hdfs://target-cluster/hbase

# 快照迁移

原理:
1. 创建表快照
2. 导出快照到目标集群
3. 从快照恢复表

特点:
– 速度快
– 支持增量
– 同版本迁移

命令:
# 创建快照
snapshot ‘fgedu_user’, ‘fgedu_user_snapshot’

# 导出快照
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot fgedu_user_snapshot \
-copy-to hdfs://target-cluster/hbase \
-mappers 16

# 恢复快照
clone_snapshot ‘fgedu_user_snapshot’, ‘fgedu_user’

# CopyTable迁移

原理:
1. 使用MapReduce复制表数据
2. 支持在线迁移

特点:
– 在线迁移
– 速度较慢
– 支持增量

命令:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
–peer.adr=target-cluster:2181:/hbase \
–families=info \
fgedu_user

# Replication迁移

原理:
1. 配置主从复制
2. 实时同步数据

特点:
– 实时同步
– 配置复杂
– 支持增量

配置:
# 源集群 hbase.replication
true

# 目标集群
add_peer ‘1’, ‘target-cluster:2181:/hbase’

# 方式对比

方式 速度 停服 跨版本 增量
Export/Import 慢 否 是 是
DistCp 快 是 否 否
Snapshot 快 否 否 是
CopyTable 慢 否 是 是
Replication 实时 否 是 是

# 选择建议

1. 小数据量+跨版本:Export/Import
2. 大数据量+同版本:Snapshot
3. 在线迁移:CopyTable
4. 实时同步:Replication

1.3 迁移工具详解

迁移工具详解:

# Export工具

参数:
-D mapreduce.job.maps=16 # Map任务数
-D mapreduce.job.reduces=4 # Reduce任务数
-D hbase.client.scanner.caching=1000 # Scan缓存

示例:
hbase org.apache.hadoop.hbase.mapreduce.Export \
-D mapreduce.job.maps=16 \
-D hbase.client.scanner.caching=1000 \
fgedu_user /backup/fgedu_user_export

# Import工具

参数:
-D mapreduce.job.maps=16 # Map任务数
-D import.bulk.output=/tmp/bulk # Bulk Load输出

示例:
hbase org.apache.hadoop.hbase.mapreduce.Import \
-D mapreduce.job.maps=16 \
fgedu_user /backup/fgedu_user_export

# ExportSnapshot工具

参数:
-snapshot 快照名称
-copy-to 目标路径
-copy-from 源路径
-mappers Map任务数
-bandwidth 带宽限制(MB/s)

示例:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot fgedu_user_snapshot \
-copy-to hdfs://target-cluster/hbase \
-mappers 16 \
-bandwidth 100

# CopyTable工具

参数:
–peer.adr 目标集群地址
–families 列族
–startrow 起始行
–stoprow 结束行
–starttime 开始时间
–endtime 结束时间
–versions 版本数

示例:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
–peer.adr=target-cluster:2181:/hbase \
–families=info \
–starttime=1680940800000 \
–endtime=1681027200000 \
fgedu_user

# DistCp工具

参数:
-m Map任务数
-bandwidth 带宽限制(MB/s)
-update 增量更新
-delete 删除目标多余文件

示例:
hadoop distcp \
-m 16 \
-bandwidth 100 \
-update \
hdfs://source-cluster/hbase/data/default/fgedu_user \
hdfs://target-cluster/hbase/data/default/fgedu_user

# 验证工具

# 数据量验证
count ‘fgedu_user’

# 数据内容验证
get ‘fgedu_user’, ‘row1’

# HDFS文件验证
hdfs dfs -du -h /hbase/data/default/fgedu_user

风哥提示:选择合适的迁移方式是迁移成功的关键。根据数据量、版本兼容性、停服时间等因素选择合适的迁移方式。

Part02-生产环境规划与建议

2.1 迁移规划建议

迁移规划建议:

# 迁移评估

1. 数据量评估
– 表数量
– 数据大小
– Region数量
– 增长速度

2. 业务评估
– 业务重要性
– 停服时间窗口
– 数据一致性要求
– 性能要求

3. 环境评估
– 源集群版本
– 目标集群版本
– 网络带宽
– 存储空间

# 迁移计划

1. 迁移准备阶段
时间:1-2天
内容:
– 环境准备
– 工具测试
– 迁移演练

2. 迁移执行阶段
时间:根据数据量
内容:
– 数据迁移
– 进度监控
– 异常处理

3. 迁移验证阶段
时间:1天
内容:
– 数据验证
– 功能验证
– 性能验证

4. 迁移切换阶段
时间:2-4小时
内容:
– 应用切换
– 数据同步
– 监控确认

# 迁移时间表

阶段 时间 负责人 备注
环境准备 T-7天 运维 目标环境搭建
工具测试 T-5天 开发 迁移工具测试
迁移演练 T-3天 运维 小规模演练
数据迁移 T-1天 运维 全量迁移
数据验证 T日 开发 数据验证
应用切换 T日 开发 应用切换
监控确认 T+1日 运维 监控确认

# 回滚计划

1. 数据回滚
– 保留源集群数据
– 准备回滚脚本
– 验证回滚流程

2. 应用回滚
– 准备回滚版本
– 配置回滚脚本
– 验证回滚流程

# 风险评估

风险 影响 概率 应对措施
迁移失败 高 低 回滚到源集群
数据丢失 高 低 备份数据
停服时间超预期 中 中 增加资源
性能下降 中 中 性能优化

2.2 数据规划建议

数据规划建议:

# 数据分类

1. 核心数据
特点:业务关键、数据量大
迁移方式:快照迁移
验证级别:严格验证

2. 重要数据
特点:业务重要、数据量中
迁移方式:Export/Import
验证级别:标准验证

3. 一般数据
特点:业务一般、数据量小
迁移方式:CopyTable
验证级别:基本验证

# 数据量规划

表名 数据量 Region数 迁移方式
fgedu_user 500GB 100 Snapshot
fgedu_order 200GB 50 Snapshot
fgedu_config 10GB 5 Export/Import
fgedu_log 50GB 20 CopyTable

# 迁移顺序

1. 配置表:先迁移配置表
2. 基础数据:迁移基础数据表
3. 业务数据:迁移业务数据表
4. 日志数据:最后迁移日志表

# 数据验证

1. 数据量验证
count ‘table_name’

2. 数据内容验证
get ‘table_name’, ‘row_key’

3. 数据一致性验证
– 抽样对比
– Hash校验
– 业务验证

# 验证脚本

$ cat > /tmp/verify_data.sh << 'EOF' #!/bin/bash # verify_data.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn TABLE=$1 SOURCE=$2 TARGET=$3 echo "验证表: $TABLE" echo "源集群: $SOURCE" echo "目标集群: $TARGET" # 获取源集群数据量 SOURCE_COUNT=$(echo "count '$TABLE'" | hbase shell -n 2>/dev/null | grep “row(s)” | awk ‘{print $1}’)

# 获取目标集群数据量
TARGET_COUNT=$(echo “count ‘$TABLE'” | hbase –config /etc/hbase-target shell -n 2>/dev/null | grep “row(s)” | awk ‘{print $1}’)

echo “源集群数据量: $SOURCE_COUNT”
echo “目标集群数据量: $TARGET_COUNT”

if [ “$SOURCE_COUNT” == “$TARGET_COUNT” ]; then
echo “验证通过”
else
echo “验证失败”
fi
EOF

2.3 风险规划建议

风险规划建议:

# 风险识别

1. 数据风险
– 数据丢失
– 数据不一致
– 数据损坏

2. 业务风险
– 停服时间超预期
– 业务功能异常
– 性能下降

3. 技术风险
– 迁移工具故障
– 网络故障
– 存储空间不足

# 风险应对

1. 数据风险应对
– 迁移前备份
– 数据验证
– 回滚准备

2. 业务风险应对
– 充分测试
– 灰度切换
– 监控告警

3. 技术风险应对
– 工具测试
– 网络保障
– 空间预留

# 应急预案

1. 迁移失败
步骤:
– 停止迁移
– 分析原因
– 修复问题
– 重新迁移

– 回滚到源集群

2. 数据不一致
步骤:
– 停止迁移
– 数据比对
– 增量同步
– 验证数据

3. 性能下降
步骤:
– 性能分析
– 参数优化
– 资源调整
– 重新验证

# 监控指标

指标 告警阈值
迁移进度 < 预期进度 数据量差异 > 1%
迁移速度 < 预期速度 错误率 > 0.1%

生产环境建议:生产环境迁移需要制定详细的迁移计划和回滚方案。建议先在测试环境演练,验证迁移流程和工具。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 Export/Import迁移

3.1.1 导出数据

# 1. 创建测试数据
$ hbase shell

hbase(main):001:0> create ‘fgedu_migrate_test’, ‘info’

Created table fgedu_migrate_test

hbase(main):002:0> put ‘fgedu_migrate_test’, ‘row1’, ‘info:name’, ‘fgedu01’

Took 0.0123 seconds.

hbase(main):003:0> put ‘fgedu_migrate_test’, ‘row1’, ‘info:age’, ’25’

Took 0.0123 seconds.

hbase(main):004:0> put ‘fgedu_migrate_test’, ‘row2’, ‘info:name’, ‘fgedu02’

Took 0.0123 seconds.

hbase(main):005:0> put ‘fgedu_migrate_test’, ‘row2’, ‘info:age’, ’30’

Took 0.0123 seconds.

hbase(main):006:0> count ‘fgedu_migrate_test’

2 row(s)

# 2. 导出数据到HDFS
$ hbase org.apache.hadoop.hbase.mapreduce.Export \
-D mapreduce.job.maps=4 \
fgedu_migrate_test /backup/fgedu_migrate_test_export

2026-04-08 15:00:00,123 INFO [main] mapreduce.Job: Running job: job_1680940800000_0001
2026-04-08 15:05:00,123 INFO [main] mapreduce.Job: Job job_1680940800000_0001 completed successfully
2026-04-08 15:05:00,234 INFO [main] mapreduce.Job: Counters: 50
File System Counters
FILE: Number of bytes read=0
FILE: Number of bytes written=123456
HDFS: Number of bytes read=0
HDFS: Number of bytes written=9876
Map-Reduce Framework
Map input records=2
Map output records=4
Map output bytes=123
Export
EXPORTED_RECORDS=4

# 3. 验证导出文件
$ hdfs dfs -ls /backup/fgedu_migrate_test_export

Found 3 items
-rw-r–r– 3 hbase hadoop 0 2026-04-08 15:05 /backup/fgedu_migrate_test_export/_SUCCESS
-rw-r–r– 3 hbase hadoop 1234 2026-04-08 15:05 /backup/fgedu_migrate_test_export/part-m-00000
-rw-r–r– 3 hbase hadoop 1234 2026-04-08 15:05 /backup/fgedu_migrate_test_export/part-m-00001

# 4. 导出数据大小
$ hdfs dfs -du -h /backup/fgedu_migrate_test_export

2.4 K /backup/fgedu_migrate_test_export

3.1.2 导入数据

# 1. 在目标集群创建表
$ hbase shell

hbase(main):007:0> create ‘fgedu_migrate_test’, ‘info’

Created table fgedu_migrate_test

# 2. 导入数据
$ hbase org.apache.hadoop.hbase.mapreduce.Import \
-D mapreduce.job.maps=4 \
fgedu_migrate_test /backup/fgedu_migrate_test_export

2026-04-08 15:10:00,123 INFO [main] mapreduce.Job: Running job: job_1680940800000_0002
2026-04-08 15:15:00,123 INFO [main] mapreduce.Job: Job job_1680940800000_0002 completed successfully
2026-04-08 15:15:00,234 INFO [main] mapreduce.Job: Counters: 50
Import
IMPORTED_RECORDS=4

# 3. 验证数据
$ hbase shell

hbase(main):008:0> count ‘fgedu_migrate_test’

2 row(s)

hbase(main):009:0> scan ‘fgedu_migrate_test’

ROW COLUMN+CELL
row1 column=info:age, timestamp=1680940800000, value=25
row1 column=info:name, timestamp=1680940800001, value=fgedu01
row2 column=info:age, timestamp=1680940800002, value=30
row2 column=info:name, timestamp=1680940800003, value=fgedu02
2 row(s)

# 4. 数据验证脚本
$ cat > /tmp/verify_migration.sh << 'EOF' #!/bin/bash # verify_migration.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn TABLE=$1 echo "验证表: $TABLE" # 获取数据量 COUNT=$(echo "count '$TABLE'" | hbase shell -n 2>/dev/null | grep “row(s)” | awk ‘{print $1}’)
echo “数据量: $COUNT”

# 抽样验证
echo “抽样验证:”
echo “get ‘$TABLE’, ‘row1′” | hbase shell -n 2>/dev/null

echo “验证完成”
EOF

$ chmod +x /tmp/verify_migration.sh
$ /tmp/verify_migration.sh fgedu_migrate_test

验证表: fgedu_migrate_test
数据量: 2
抽样验证:
COLUMN CELL
info:age timestamp=1680940800000, value=25
info:name timestamp=1680940800001, value=fgedu01
验证完成

3.2 DistCp迁移实战

# 1. 停止源集群写入
$ hbase shell

hbase(main):010:0> disable ‘fgedu_distcp_test’

Took 0.5678 seconds.

# 2. 查看表HDFS路径
$ hdfs dfs -ls /hbase/data/default/fgedu_distcp_test

Found 2 items
drwxr-xr-x – hbase hadoop 0 2026-04-08 15:00 /hbase/data/default/fgedu_distcp_test/info
-rw-r–r– 3 hbase hadoop 123 2026-04-08 15:00 /hbase/data/default/fgedu_distcp_test/.tableinfo
-rw-r–r– 3 hbase hadoop 456 2026-04-08 15:00 /hbase/data/default/fgedu_distcp_test/.regioninfo

# 3. 使用DistCp复制数据
$ hadoop distcp \
-m 8 \
-bandwidth 50 \
-update \
hdfs://source-cluster:8020/hbase/data/default/fgedu_distcp_test \
hdfs://target-cluster:8020/hbase/data/default/fgedu_distcp_test

2026-04-08 15:20:00,123 INFO tools.DistCp: DistCp job: job_1680940800000_0003
2026-04-08 15:25:00,123 INFO tools.DistCp: DistCp job completed successfully
2026-04-08 15:25:00,234 INFO tools.DistCp: Number of files copied: 10
2026-04-08 15:25:00,345 INFO tools.DistCp: Number of bytes copied: 12345678

# 4. 在目标集群修复表
$ hbase hbck -fixMeta -fixAssignments

2026-04-08 15:30:00,123 INFO util.HBaseFsck: Loading region info from HDFS
2026-04-08 15:30:00,234 INFO util.HBaseFsck: Loading table info from HDFS
2026-04-08 15:30:00,345 INFO util.HBaseFsck: Fixing meta table
2026-04-08 15:30:00,456 INFO util.HBaseFsck: Fixing assignments
2026-04-08 15:30:00,567 INFO util.HBaseFsck: HBCK completed

# 5. 启用表
$ hbase shell

hbase(main):011:0> enable ‘fgedu_distcp_test’

Took 0.7890 seconds.

hbase(main):012:0> count ‘fgedu_distcp_test’

10000 row(s)

# 6. 验证数据
hbase(main):013:0> scan ‘fgedu_distcp_test’, {LIMIT => 10}

ROW COLUMN+CELL
row00001 column=info:name, timestamp=1680940800000, value=fgedu00001
row00002 column=info:name, timestamp=1680940800001, value=fgedu00002

10 row(s)

3.3 快照迁移实战

# 1. 创建快照
$ hbase shell

hbase(main):014:0> snapshot ‘fgedu_snapshot_test’, ‘fgedu_snapshot_test_20260408’

Took 0.2345 seconds.

# 2. 查看快照
hbase(main):015:0> list_snapshots

SNAPSHOT TABLE + CREATION TIME
fgedu_snapshot_test_20260408 fgedu_snapshot_test (2026-04-08 15:00:00 +0800)
1 row(s)

# 3. 导出快照到目标集群
$ hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot fgedu_snapshot_test_20260408 \
-copy-to hdfs://target-cluster:8020/hbase \
-mappers 8 \
-bandwidth 100

2026-04-08 15:35:00,123 INFO snapshot.ExportSnapshot: Copy Snapshot ‘fgedu_snapshot_test_20260408’
2026-04-08 15:40:00,123 INFO snapshot.ExportSnapshot: Copy completed. Files: 100, Bytes: 123456789
2026-04-08 15:40:00,234 INFO snapshot.ExportSnapshot: Export Snapshot completed

# 4. 在目标集群克隆快照
$ hbase shell

hbase(main):016:0> list_snapshots

SNAPSHOT TABLE + CREATION TIME
fgedu_snapshot_test_20260408 fgedu_snapshot_test (2026-04-08 15:00:00 +0800)
1 row(s)

hbase(main):017:0> clone_snapshot ‘fgedu_snapshot_test_20260408’, ‘fgedu_snapshot_test’

Took 0.5678 seconds.

# 5. 验证数据
hbase(main):018:0> count ‘fgedu_snapshot_test’

50000 row(s)

hbase(main):019:0> scan ‘fgedu_snapshot_test’, {LIMIT => 5}

ROW COLUMN+CELL
row00001 column=info:name, timestamp=1680940800000, value=fgedu00001
row00002 column=info:name, timestamp=1680940800001, value=fgedu00002
row00003 column=info:name, timestamp=1680940800002, value=fgedu00003
row00004 column=info:name, timestamp=1680940800003, value=fgedu00004
row00005 column=info:name, timestamp=1680940800004, value=fgedu00005
5 row(s)

# 6. 删除快照
hbase(main):020:0> delete_snapshot ‘fgedu_snapshot_test_20260408’

Took 0.1234 seconds.

# 7. 迁移脚本
$ cat > /tmp/migrate_snapshot.sh << 'EOF' #!/bin/bash # migrate_snapshot.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn TABLE=$1 SNAPSHOT_NAME="${TABLE}_$(date +%Y%m%d)" TARGET_CLUSTER=$2 echo "迁移表: $TABLE" echo "快照名称: $SNAPSHOT_NAME" echo "目标集群: $TARGET_CLUSTER" # 创建快照 echo "创建快照..." echo "snapshot '$TABLE', '$SNAPSHOT_NAME'" | hbase shell -n # 导出快照 echo "导出快照..." hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \ -snapshot $SNAPSHOT_NAME \ -copy-to hdfs://$TARGET_CLUSTER:8020/hbase \ -mappers 8 \ -bandwidth 100 echo "迁移完成" EOF $ chmod +x /tmp/migrate_snapshot.sh $ /tmp/migrate_snapshot.sh fgedu_user target-cluster 迁移表: fgedu_user 快照名称: fgedu_user_20260408 目标集群: target-cluster 创建快照... 导出快照... 迁移完成

风哥提示:快照迁移是最推荐的大数据量迁移方式,速度快且支持增量迁移。迁移前建议创建快照备份,迁移后验证数据一致性。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 跨版本迁移案例

# 场景:从HBase 1.x迁移到HBase 2.x

# 1. 评估版本差异
源版本:HBase 1.4.x
目标版本:HBase 2.5.x

主要差异:
– 协处理器API变化
– 客户端API变化
– 配置参数变化

# 2. 选择迁移方式
跨版本迁移使用Export/Import

# 3. 导出数据
$ hbase org.apache.hadoop.hbase.mapreduce.Export \
-D mapreduce.job.maps=16 \
fgedu_user /backup/hbase1_fgedu_user_export

2026-04-08 16:00:00,123 INFO mapreduce.Job: Job completed successfully
2026-04-08 16:05:00,123 INFO mapreduce.Export: EXPORTED_RECORDS=1000000

# 4. 传输导出文件
$ hadoop distcp \
-m 8 \
hdfs://hbase1-cluster/backup/hbase1_fgedu_user_export \
hdfs://hbase2-cluster/backup/hbase1_fgedu_user_export

# 5. 在HBase 2.x创建表
$ hbase shell

hbase(main):021:0> create ‘fgedu_user’,
{NAME => ‘info’, VERSIONS => 3, COMPRESSION => ‘SNAPPY’},
{NAME => ‘detail’, VERSIONS => 1, COMPRESSION => ‘SNAPPY’}

Created table fgedu_user

# 6. 导入数据
$ hbase org.apache.hadoop.hbase.mapreduce.Import \
-D mapreduce.job.maps=16 \
fgedu_user /backup/hbase1_fgedu_user_export

2026-04-08 16:30:00,123 INFO mapreduce.Job: Job completed successfully
2026-04-08 16:35:00,123 INFO mapreduce.Import: IMPORTED_RECORDS=1000000

# 7. 验证数据
$ hbase shell

hbase(main):022:0> count ‘fgedu_user’

1000000 row(s)

# 8. 更新应用代码
– 更新HBase客户端版本
– 修改API调用
– 测试应用功能

4.2 跨集群迁移案例

# 场景:从旧集群迁移到新集群

源集群:hbase-old (3节点)
目标集群:hbase-new (5节点)

# 1. 准备工作
# 检查目标集群空间
$ hdfs dfs -df -h /

Filesystem Size Used Available Use%
hdfs://hbase-new 10.0T 2.0T 8.0T 20%

# 检查网络连通性
$ ping hbase-new-node1

# 2. 迁移计划
表名 数据量 迁移方式 时间窗口
fgedu_user 500GB Snapshot 2小时
fgedu_order 300GB Snapshot 1.5小时
fgedu_config 10GB Export 0.5小时

# 3. 执行迁移
# 迁移fgedu_user表
$ hbase shell

hbase(main):023:0> snapshot ‘fgedu_user’, ‘fgedu_user_migrate’

Took 0.2345 seconds.

$ hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot fgedu_user_migrate \
-copy-to hdfs://hbase-new:8020/hbase \
-mappers 16 \
-bandwidth 200

2026-04-08 17:00:00,123 INFO snapshot.ExportSnapshot: Export completed

# 在新集群克隆
$ hbase –config /etc/hbase-new shell

hbase(main):024:0> clone_snapshot ‘fgedu_user_migrate’, ‘fgedu_user’

Took 0.5678 seconds.

# 4. 数据验证
$ cat > /tmp/verify_cross_cluster.sh << 'EOF' #!/bin/bash # verify_cross_cluster.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn TABLE=$1 echo "验证表: $TABLE" # 源集群数据量 SOURCE_COUNT=$(echo "count '$TABLE'" | hbase shell -n 2>/dev/null | grep “row(s)” | awk ‘{print $1}’)
echo “源集群数据量: $SOURCE_COUNT”

# 目标集群数据量
TARGET_COUNT=$(echo “count ‘$TABLE'” | hbase –config /etc/hbase-new shell -n 2>/dev/null | grep “row(s)” | awk ‘{print $1}’)
echo “目标集群数据量: $TARGET_COUNT”

if [ “$SOURCE_COUNT” == “$TARGET_COUNT” ]; then
echo “数据量验证通过”
else
echo “数据量验证失败”
fi
EOF

$ /tmp/verify_cross_cluster.sh fgedu_user

验证表: fgedu_user
源集群数据量: 1000000
目标集群数据量: 1000000
数据量验证通过

# 5. 应用切换
# 停止旧集群写入
# 启动新集群写入
# 更新应用配置

4.3 常见问题处理

4.3.1 迁移速度慢

# 问题现象:迁移速度慢

# 排查步骤
# 1. 检查网络带宽
$ ifconfig eth0

# 2. 检查磁盘IO
$ iostat -x 1

# 3. 检查Map任务数
$ yarn application -list

# 解决方案
# 1. 增加Map任务数
$ hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot fgedu_user_migrate \
-copy-to hdfs://target:8020/hbase \
-mappers 32

# 2. 增加带宽限制
$ hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot fgedu_user_migrate \
-copy-to hdfs://target:8020/hbase \
-bandwidth 200

# 3. 优化HBase配置
hbase.regionserver.handler.count=200
hbase.client.scanner.caching=1000

4.3.2 数据不一致

# 问题现象:数据不一致

# 排查步骤
# 1. 对比数据量
$ echo “count ‘fgedu_user'” | hbase shell -n
$ echo “count ‘fgedu_user'” | hbase –config /etc/hbase-target shell -n

# 2. 抽样对比
$ echo “get ‘fgedu_user’, ‘row1′” | hbase shell -n
$ echo “get ‘fgedu_user’, ‘row1′” | hbase –config /etc/hbase-target shell -n

# 解决方案
# 1. 增量同步
$ hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
–peer.adr=target-cluster:2181:/hbase \
–starttime=1680940800000 \
fgedu_user

# 2. 重新迁移
– 删除目标表
– 重新执行迁移

Part05-风哥经验总结与分享

5.1 迁移最佳实践

迁移最佳实践建议:

# 迁移最佳实践
1. 制定详细的迁移计划
2. 选择合适的迁移方式
3. 充分测试迁移流程
4. 准备回滚方案
5. 验证数据一致性

5.2 迁移建议

迁移建议:

HBase迁移建议:

  • 迁移前备份重要数据
  • 选择合适的迁移窗口
  • 监控迁移进度
  • 验证数据一致性

5.3 工具推荐

迁移工具:

  • Export/Import:跨版本迁移
  • Snapshot:大数据量迁移
  • DistCp:HDFS数据复制
  • CopyTable:在线迁移
风哥提示:数据迁移是高风险操作,需要制定详细的计划和回滚方案。建议先在测试环境演练,验证迁移流程后再在生产环境执行。from bigdata视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息