最近更新时间:2021-12-27 17:19:02
DistChecker 用于校验 hdfs、ks3 上文件或目录的一致性。
注:
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 count
默认为 5,建议根据集群情况设置
纯净模式