
# 创建CDL数据比较任务作业
#### 操作场景
数据比对即是对源端数据库中的数据和目标端Hive中的数据做数据一致性校验，如果数据不一致，CDL可以尝试修复不一致的数据。
当前数据对比任务支持手动全量任务比对。数据比对任务采用On Yarn的运行形态，比对结果会上传到HDFS目录。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 数据比对目前仅支持基本数据类型比对， 不支持日期、时间戳、decimal、numeric、json等特殊数据类型的比对。
- 数据比对任务不支持数据表字段名包含数据库关键字的表进行数据比对。
- 数据比对任务单表比较仅支持100个以内的字段进行比较， 如果单表的字段超过一百， 可以分两次指定不同的比较字段的白名单进行数据比对。
- 当前只支持对从PgSQL抓取到Hudi的数据进行比对，如果"比较结果"为"不一致"，不一致的数据需小于或等于2000行才会生成报告地址；如果不一致的数据大于2000行，则不会生成报告地址，并且不支持修复数据。
- 参与比对的CDL任务kafka lag不为0时会导致比对结果不一致。
 
#### 前提条件
1. 准备Hive UDF Jar包， 从CDL的安装目录复制"${BIGDATA_HOME}/FusionInsight_CDL_\*/install/FusionInsight-CDL-\*/cdl/hive-checksum/cdl-dc-hive-checksum-\*.jar"UDF Jar到Hive的"${BIGDATA_HOME}/third_lib/Hive"目录下，并设置该Jar包的权限为大于或等于750。 ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676748486.png "点击放大")
   
2. 开启Kerberos认证的集群需已创建具有CDL管理操作权限的用户。如果当前集群开启了Ranger鉴权，还需参考[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1858.html)章节授予用户Hive管理员权限和UDF操作权限。
3. 使用具有Hive管理员权限的用户在Hive客户端创建全局的UDF算法： 创建CheckSum函数（在default数据库下执行）：
   **create function checksum_aggregate as 'com.huawei.hive.checksum.ChecksumUdaf'**
   
4. 创建比较任务之前一定要存在CDL同步任务，比较任务会在启动前感知同步任务的状态和数据同步情况来决定对哪些数据做比较。
5. 数据比对关联的数据同步任务中的数据库用户需要对当前Schema具有**create function**权限。
 
#### 操作步骤
1. 使用已创建的用户或**admin** 用户（未开启Kerberos认证的集群）登录CDLService WebUI界面，请参考[登录CDLService WebUI界面](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24236.html)。
2. 选择"作业管理 \> 数据比较任务 \> 新建作业"，在弹出的窗口中输入作业相关信息，然后单击"下一步"。其中： 
   
   | 参数名称          | 说明                                                                                                                          | 示例           |
   |:---|:---|:---|
   | Name          | 数据比较任务名                                                                                                                     | job_dc_test  |
   | CDL Job Name  | 关联的同步任务名（注意：此处运行比较任务的用户就是关联的同步任务中Hudi Link对应的用户）                                                                            | pg2hudi_test |
   | Execution Env | 运行Spark任务时需要的环境变量，如果当前无可用的ENV，则需先参考[管理CDL ENV变量](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24255.html)进行创建。 | dc_env       |
   | Desc          | 描述信息                                                                                                                        | -            |
      
   
   
3. 在"创建Compare-Pair"界面参照下表进行参数设置，并单击"创建"。 
   
   | 参数名称              | 说明          | 示例        |
   |:---|:---|:---|
   | Name              | 当前比对任务名。    | test      |
   | Source Table      | 源端表名。       | tabletest |
   | Target Table      | 目标端表名。      | tabletest |
   | WhiteList Columns | 参与数据比较的列族。  | -         |
   | BlackList Columns | 不参与数据比较的列族。 | -         |
   | Where Condition   | 自定义比较条件     | -         |
      
   如果需比较多张表，可单击"添加"新增。
   
   
4. 在数据比较任务列表中单击新建作业所在行的"启动"，启动数据比对任务。
5. 运行结束后，可在数据比较任务列表的"比较结果"列查看运行结果。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676748478.png)
   
   
6. 如果"比较结果"为"不一致"，可选择"更多 \> 查看记录"。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724867537.png "点击放大")
   
   
7. 进入任务运行记录窗口，单击对应任务的"操作"列的"查看结果"。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724867541.png "点击放大")
   
   
8. 单击"修复"，尝试修复内容。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676908190.png "点击放大")
   
   
9. 修复完成后，查看"比较结果"是否为"一致"，"一致"则表示数据修复成功；如果比较结果为"不一致"，则表示修复失败，可以根据"报告地址"在HDFS对应目录中获取报告，进行手动修复。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676908186.png "点击放大")
   
   
 
