我想将一些文件从一个位置移动到另一个位置(两个位置都在HDFS上),并且需要验证数据是否已正确移动。

为了比较移动的数据,我正在考虑计算两个文件上的哈希码,然后比较它们是否相等。如果相等,则将数据移动视为正确,否则数据移动未正确发生。

但是我对此有两个问题。

  • 我是否首先需要使用hashCode技术?我正在使用MapR分布,并且在完成后读取某处的数据移动,在后端实现数据的哈希并确保已正确传输数据。那么,可以保证在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,因此这三个文件之中或两者之间的问题都可能对副本造成不利影响且无提示。

    编辑

    我用来检查sourcedist文件的常用方法是检查文件数和每个文件的指定大小。这可以通过在源代码处生成一个manifest,然后检查dist的数量和大小来完成。

    09-27 08:40