# DistChecker **Repository Path**: ks3sdk/DistChecker ## Basic Information - **Project Name**: DistChecker - **Description**: DistChecker 用于校验hdfs、ks3上文件或目录的一致性。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-17 - **Last Updated**: 2022-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式文件校验工具 DistChecker ## 功能说明 DistChecker 用于校验 hdfs、ks3 上文件或目录的一致性。 * 运行于 mapreduce 框架上,需要 MR 的运行环境。 * 访问 ks3 文件,需要依赖 hadoop-ks3 的包;并增加相关 ks3 配置 ### 原理 * DistChecker 将需要校验的每一对源 path和目标 path,进行校验。 * Reduce 用于汇总结果。 * 针对输入文件的每一行,递归遍历源 path,将遍历出来的文件路径列表,进行 shuffle 打乱顺序, 然后按照行数(根据map数计算得出)进行读取;然后根据源 path 进行 reduce *注:* *1. shuffle 打乱顺序有助于提升 map 任务的均衡度,降低 MR 任务数据倾斜的风险* *2. map 数,可以通过命令行的第三个参数传入;默认为 5* *3. 读取行数的计算方式为 lineCount/mapCount+1,即遍历后的文件路径列表行数除以 map 数、然后加 1* *4. 过程中会在 hdfs 的临时目录写入文件 check-file-list-detailed 和 check-file-list-shuffled* ### 一致性校验 对于文件校验,由于原生 hdfs 的 checksum 会根据 block 的大小、EC 等发生变化,而文件长度会因加密、压缩等发生变化,因此采用读取完整文件的方式,校验两个文件的 MD5 来校验两个文件的一致性。 如果校验的是目录,则递归校验该目录树中所有文件和目录。 ### 性能 使用 md5 会比 crc 消耗更多的性能,但是具有更好的安全性。一个 2GB 大小的文件计算 MD5 大约需要 7s ## 使用 `hadoop jar dist-checker-x.x.x.jar [check list file] [result output path] [map count]` ### 参数说明: * 校验列表文件 `check list file` 文件中每行包含一个源 path和一个目标 path,以 "," 分隔。DistChecker 会对比源 path 和目标 path 的一致性。 例如 [check list file] 文件如下: hadoop fs -cat [check list file]
hdfs://hdfs-ha/tmp/check/data/d1/d1-f2,ks3://ryanbk-test/mi/d1-f2-nomi
hdfs://hdfs-ha/tmp/check/data,ks3://ryanbk-test/check/data
* 校验结果输出目录 `result output path` DistChecker 会将校验文件列表中每一行的校验结果,以源 path 为 key 输出到校验结果文件中。如果校验成功,标记 true;如果失败,标记 false,并列出其中不一致的 entries。 例如检查结果如下: hadoop fs -cat [result output path]/part-r-00000
hdfs://hdfs-ha/tmp/check/data,false || inconsistent path(s):  hdfs://hdfs-ha/tmp/check/data/d2=>ks3://ryanbk-test/check/data/d2=>TARGET_FILE_MISSING
hdfs://hdfs-ha/tmp/check/data/d1/d1-f2,true
* 设置 map 数 `map count` 默认为 5,建议根据集群情况设置