我想将一些文件从一个位置移动到另一个位置(两个位置都在HDFS上),并且需要验证数据是否已正确移动。
为了比较移动的数据,我正在考虑计算两个文件上的哈希码,然后比较它们是否相等。如果相等,则将数据移动视为正确,否则数据移动未正确发生。
但是我对此有两个问题。
提前致谢。
最佳答案
您正在询问数据复制。只需使用DistCp即可。
#sample example
$hadoop distcp hdfs://nn1:8020/foo/bar \
hdfs://nn2:8020/bar/foo
这会将nn1上/ foo / bar下的 namespace 扩展为一个临时文件,将其内容划分为一组映射任务,并在每个TaskTracker上从nn1到nn2进行复制。
编辑
DistCp
使用MapReduce
来实现其分发,错误处理和恢复以及报告。复制后,建议对源和目标列表进行
one generates and cross-checks
编码,以验证复制是否真正成功。由于DistCp同时使用MapReduce和FileSystem API,因此这三个文件之中或两者之间的问题都可能对副本造成不利影响且无提示。编辑
我用来检查
source
和dist
文件的常用方法是检查文件数和每个文件的指定大小。这可以通过在源代码处生成一个manifest
,然后检查dist
的数量和大小来完成。