
# 使用CDM迁移CloudTable HBase集群数据至CloudTable HBase集群
云数据迁移（Cloud Data Migration，简称CDM），是一种高效、易用的批量数据迁移服务。 CDM围绕大数据迁移上云和智能数据湖解决方案，提供了简单易用的迁移能力和多种数据源到数据湖的集成能力，降低了客户数据源迁移和集成的复杂性，有效地提高您数据迁移和集成的效率。
本章节介绍使用CDM迁移CloudTable HBase集群数据至CloudTable HBase集群。基本流程如下：
1. [准备工作]
2. [步骤一：关闭目的集群major compaction（可选）]
3. [步骤二：配置replication同步增量数据]
4. [步骤三：创建CDM集群]
5. [步骤四：创建CDM连接]
6. [步骤五：新建作业和整库迁移数据]
7. [步骤六：验证]
图1迁移场景图   
![](https://support.huaweicloud.com/bestpractice-cloudtable/zh-cn_image_0000002431033976.png "点击放大")
#### 约束限制
- 目的集群、源集群、CDM集群网络互通，必须在同一个区域、VPC和安全组中。
- 源集群和目的集群关闭安全通道。
- 此实践适用于HBase 2.x版本。不同版本操作可能有差异，具体操作详情以实际版本对应的操作指导为准。
- 搬迁数据量较大时，对网络通信要求较高，执行搬迁任务时，可能会影响其他业务，建议在业务空闲期进行数据迁移任务。
 
 #### 准备工作
- 已购买源端和目的端HBase集群。
- 源端和目的端客户端安装完成。
 
 #### 步骤一：关闭目的集群major compaction（可选）
如果源端集群业务存在delete操作，目的集群执行major compaction操作可能导致delete数据不一致。为了避免此现象，需要先关闭目标集群major compaction。
1. 修改目标集群hbase-site.xml配置，设置"hbase.hregion.majorcompaction=0"，此操作联系技术人员操作。
2. 使用SSH登录工具（如PuTTY）通过"弹性IP"远程登录到Linux弹性云服务器，启动HBase Shell访问目的集群。 执行"bin/hbase shell"，启动HBase Shell访问集群。
   
3. 执行命令，使配置生效。
   ```
   update_all_config
   ```
   
 
 #### 步骤二：配置replication同步增量数据
1. 使用SSH登录工具（如PuTTY）通过"弹性IP"远程登录到Linux弹性云服务器，访问源端HBase集群。
   ```
   bin/hbase shell
   ```
   
2. 配置源端集群到目的集群的单向数据复制通道。
   ```
   add_peer '1', CLUSTER_KEY => "目标集群zk1,目标集群zk2,目标集群zk3:2181:/hbase"
   ```
   
3. 在源端集群上开启每个表增量同步。每个表都需要执行。执行完后记录时间A，例如2025-09-03 20:00:00。 启用HBase表实时同步功能，该步骤需要修改表的数据，会触发region的上下线，会导致实时业务的抖动，一般在1分钟以内。
   ```
   enable_table_replication 'tablename'
   ```
   
 
 #### 步骤三：创建CDM集群
1. 登录[云数据迁移服控制台](https://console.huaweicloud.com/cdm#/cdm/clusterList)，创建CDM集群。
2. 单击"购买云数据迁移服务"，按照以下参数配置。
   表1CDM集群参数 
   | 参数    | 取值                                                             |
   |:---|:---|
   | 当前区域  | 与CloudTable选择在同一个区域。                                           |
   | 可用区   | 根据实际情况选择。                                                      |
   | 集群名称  | CDM-demo。集群名称在4位到64位之间，必须以字母开头，可以包含字母、数字、中划线或者下划线，不能包含其他的特殊字符。 |
   | 实例类型  | 根据用户实际需求选择规格，建议规格在16U以上。                                       |
   | 虚拟私有云 | 与CloudTable HBase选择同一个VPC。                                     |
   | 子网    | 与CloudTable HBase选择同一个子网。                                      |
   | 安全组   | 与CloudTable HBase选择同一个安全组。                                     |
   | 企业项目  | default                                                        |
      
   
3. 单击"立即购买"，核对参数无误，单击"提交"。
4. 回到CDM管理控制台的"集群管理"页面，集群创建成功后状态为"可运行"状态，单击集群操作列的"绑定弹性IP"。
5. 勾选可用的弹性IP，单击"确定"。如果没有弹性IP，需要跳转到弹性IP界面，购买弹性IP。
 
 #### 步骤四：创建CDM连接
**源端HBase集群创建连接**
1. CDM集群创建完成后，创建源连接。单击CDM集群操作列的"作业管理 \> 连接管理"。
2. 进入连接管理页面，单击"新建连接"，创建源端集群连接，连接器选择"Apache HBase"。
   图2连接器类型   
   ![](https://support.huaweicloud.com/bestpractice-cloudtable/zh-cn_image_0000002462449369.png "点击放大") 
3. 单击"下一步"，进入"详细配置"页面，配置参数并测试连通性。
   表2详细配置 
   | 参数      | 描述                                                                                                                                                                                                                                |
   |:---|:---|
   | 名称      | 连接的名称，根据连接的数据源类型，用户可自定义便于记忆、区分的连接名。                                                                                                                                                                                               |
   | ZK链接地址  | HBase的ZooKeeper链接地址。 格式：\<host1\>:\<port\>,\<host2\>:\<port\>,\<host3\>:\<port\> 需配置为CloudTable HBase的"ZK连接地址（内网）"。在集群管理页面中找到所需要的集群，并获取相应的"ZK链接地址（内网）"。 |
   | 认证类型    | 访问集群的认证类型：SIMPLE 非安全模式选择SIMPLE鉴权。                                                                                                                                                           |
   | HBase版本 | HBase组件版本，HBASE_2_X。                                                                                                                                                                                                              |
   | 运行模型    | EMBEDDED：连接实例与CDM运行在一起，该模式性能较好。                                                                                                                                                                                                   |
      
   图3详细配置   
   ![](https://support.huaweicloud.com/bestpractice-cloudtable/zh-cn_image_0000002428706888.png "点击放大") 
4. 单击"测试"，测试通过后，单击"保存"。
**目的端HBase集群创建连接**
5. 进入连接管理页面，单击"新建连接"，创建目的端集群连接，连接器选择"Apache HBase"。
6. 单击"下一步"，进入"详细配置"页面，配置参数并测试连通性。 ZK链接地址为目的端集群ZK地址。
   
7. 单击"测试"，测试通过后，单击"保存"。
 
 #### 步骤五：新建作业和整库迁移数据
1. 源端和目的端集群创建连接后，单击"整库迁移"。
2. 进"整库迁移"页面，单击"新建作业"。
3. 配置如下参数，单击"下一步"。
   - 作业名称：用户自定义任务名称，名称由中文、数字、字母、中划线、下划线、点号，且首字符不能是中划线或点号组成，长度必须在1到240个字符之间。
   
   - 源端作业配置：
     - 源连接名称：源端HBase集群创建的连接名称。
     
     - 终止时间：配置终止时间，比开启表增量同步的时间A晚半小时或一小时。
      
   
   - 目的端作业配置：
     - 目的连接名称：目的端HBase集群创建的连接名称。
     
     - 导入前是否清空数据：否。
     
     - 自动创表：不自动创建。
      
    
4. 字段映射，单击"下一步"。
   图4字段映射   
   ![](https://support.huaweicloud.com/bestpractice-cloudtable/zh-cn_image_0000002496767729.png "点击放大") 
5. 任务配置。配置以下参数，其他参数保持默认即可。确认参数无误，单击"保存并运行"。 抽取并发数：建议设置范围为10\~20。
   
 
 #### 步骤六：验证
1. （可选）如果目的集群关闭majorcompaction，数据迁移完成后需要修改目的集群hbase-site.xml文件中hbase.hregion.majorcompaction=604800000（联系技术人员修改）。
   执行命令，使配置生效。
   ```
   update_all_config
   ```
   
2. 使用SSH登录工具（如PuTTY）通过"弹性IP"远程登录到Linux弹性云服务器，启动Shell访问源端集群。 执行"bin/hbase shell"，启动Shell访问集群。
   每个表执行以下命令，触发region上下线。
   ```
   disable_table_replication 'table_name'
   ```
   
3. 移除集群复制通道，"1"为[2.]中设置的ID。
   ```
   remove_peer '1'
   ```
   
4. 使用SSH登录工具（如PuTTY）通过"弹性IP"远程登录到Linux弹性云服务器，启动Shell访问目的端集群。 执行"bin/hbase shell"，启动Shell访问集群。
   执行list命令查看迁移表。
   ```
   hbase:008:0> list
   TABLE
   cloudtable
   1 row(s)
   Took 0.0093 seconds
   => ["cloudtable"]
   ```
   
 
#### 常见问题
目的集群和源端集群数据一致性核对方法：
- 查询时间戳范围内的数据条数。
  ```
  hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'af_blacklist' --starttime 开始时间戳毫秒 --endtime 截止时间戳毫秒
  ```
  示例：hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'af_blacklist'--starttime=1683353756000 --endtime=1683440156000
  
- 查询rowkey范围内的数据条数。
  ```
  hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名’ --range=[startKey], [endKey]
  ```
  示例：hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'af_blacklist' --range=11792209288XX_190218,11792209288XX_f5f99f
  
 
