【问题标题】:Calculating HashCode function in HDFS在 HDFS 中计算 HashCode 函数
【发布时间】:2015-09-01 12:57:22
【问题描述】:

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

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

但我对此有几个问题。

  1. 首先我需要使用 hashCode 技术吗?我正在使用 MapR 分发,我在某处读取数据移动完成后,在后端实现数据散列并确保它已正确传输。那么是不是保证数据在HDFS里面移动的时候是一致的,移动的时候不会插入异常呢?

  2. 我可以使用任何其他方法来确保移动的数据在不同位置之间保持一致吗?

提前致谢。

【问题讨论】:

    标签: hadoop hdfs hashcode mapr


    【解决方案1】:

    您在询问数据复制。只需使用DistCp

    DistCp(分布式副本)是一种用于大型集群间/集群内复制的工具。它使用 MapReduce 来实现其分布、错误处理和恢复以及报告

    #sample example 
    $hadoop distcp hdfs://nn1:8020/foo/bar \ 
                    hdfs://nn2:8020/bar/foo
    

    这会将 nn1 上 /foo/bar 下的命名空间扩展为一个临时文件,将其内容划分为一组映射任务,并在每个 TaskTracker 上从 nn1 开始复制到 nn2。


    编辑

    DistCp 使用MapReduce 来实现其分发、错误处理和恢复以及报告

    复制后,建议one generates and cross-checks列出来源和目的地,以·验证复制是否真正成功·。由于 DistCp 同时使用 MapReduce 和 FileSystem API,三者之间的问题可能会对副本产生不利的影响。


    编辑

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

    【讨论】:

    • 问题不在于使用什么?我可以使用 DistCp 来复制我的数据。相反,我需要验证数据是否已成功复制而没有任何错误。感谢您的回答,但如果您能回答我最初问题中的第 1 个问题,那就太好了!使用 DistCp 能保证副本无错误吗?
    • 多谢洛洛!一个问题。您提到您建议生成并交叉检查两个源广告目标的列表!那是原始问题中的#2。有没有一种有效的方法,然后将计数或 hashCode 用于源和目标?
    • 谢谢洛洛!为您的努力 +1 :) 我会尝试实施您的建议,一旦完成,我肯定会接受它作为答案。再次感谢!
    【解决方案2】:

    在 HDFS 中,移动不会在数据节点之间物理移动数据(块)。它实际上改变了 HDFS 元数据中的名称空间。将数据从一个 HDFS 位置复制到另一个 HDFS 位置,我们有两种方法;

    1. 复制
    2. 并行复制distcp

    在一般副本中,它不检查块的完整性。如果您希望在将文件从一个位置复制到同一 HDFS 集群中的另一个位置时保持数据完整性,请通过修改 FsShell.java 类或使用 HDFS Java API 编写您自己的类来使用 CheckSum 概念。

    对于 distCp,HDFS 在将数据从一个 HDFS 集群复制到另一个 HDFS 集群时检查数据完整性。

    【讨论】:

    • Naga - 洛洛有一些建议让我检查我的数据移动的有效性。您正在实施什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多