我想将一些文件从一个位置移动到另一个位置 [这两个位置都在 HDFS 上],并且需要验证数据是否已正确移动。
为了比较移动的数据,我在考虑计算两个文件的哈希码,然后比较它们是否相等。如果相等,我会认为数据移动是正确的,否则数据移动没有正确发生。
但我对此有几个问题。
首先我是否需要使用 hashCode 技术?我正在使用 MapR 分发,我在某个地方读取了完成后的数据移动,在后端实现数据散列并确保它已正确传输。那么能不能保证数据在HDFS内部移动的时候是一致的,移动的时候不会插入异常呢?
我是否可以使用任何其他方式来确保移动的数据在不同位置保持一致?
提前致谢。
最佳答案
你问的是数据复制。只需使用 DistCp .
DistCp (distributed copy) is a tool used for large inter/intra-cluster copying. It uses MapReduce to effect its distribution, error handling and recovery, and reporting.
#sample example
$hadoop distcp hdfs://nn1:8020/foo/bar \
hdfs://nn2:8020/bar/foo
这会将 nn1 上/foo/bar 下的命名空间扩展为一个临时文件,将其内容分区到一组映射任务中,并在从 nn1 到 nn2 的每个 TaskTracker 上启动一个副本。
编辑
DistCp
使用 MapReduce
来影响其分发、错误处理和恢复以及报告。
复制后,建议生成并交叉检查
源和目标列表,以·验证复制是否真正成功·。由于 DistCp 同时使用 MapReduce 和 FileSystem API,三者中的任何一个或两者之间的问题都可能对副本产生不利和无声的影响。
编辑
我用来检查 source
和 dist
文件的常用方法是检查文件的数量和每个文件的指定大小。这可以通过在源代码处生成一个 manifest
来完成,然后在 dist
中检查数量和大小。
关于hadoop - 计算HDFS中的HashCode函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332282/