hadoop—在hdfs中计算hashcode函数

y1aodyip  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(388)

我想将一些文件从一个位置移动到另一个位置[这两个位置都在hdfs上],并需要验证数据是否正确移动。
为了比较移动的数据,我考虑计算两个文件的哈希代码,然后比较它们是否相等。如果相等,我会将数据移动称为正确的,否则数据移动不会正确发生。
但我有几个问题要问。
我首先需要使用hashcode技术吗?我使用的是mapr发行版,我在某处读到数据移动完成后,在后端实现对数据的哈希处理,并确保数据已正确传输。那么,当数据在hdfs中移动时,是否保证了数据的一致性,并且在移动过程中不会插入异常?
我是否可以使用其他方法来确保跨位置移动的数据是一致的?
提前谢谢。

o8x7eapl

o8x7eapl1#

在hdfs中,move不会在数据节点上物理地移动数据(块)。它实际上改变了hdfs元数据中的名称空间。其中,将数据从一个hdfs位置复制到另一个hdfs位置有两种方法;
复制
并行拷贝分发
在一般情况下,它不会检查块的完整性。如果您想在将文件从一个位置复制到同一hdfs集群中的另一个位置时保持数据完整性,请通过修改fsshell.java类来使用校验和概念,或者使用hdfs java api编写您自己的类。
在distcp的情况下,hdfs检查数据完整性,同时将数据从一个hdfs集群复制到另一个hdfs集群。

aelbi1ox

aelbi1ox2#

您正在询问有关数据复制的问题。只需使用distcp。
distcp(distributed copy)是一种用于大型集群间/集群内复制的工具。它使用mapreduce实现其分发、错误处理和恢复以及报告。


# sample example

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

这将把nn1上的/foo/bar下的名称空间扩展到一个临时文件中,在一组Map任务中划分其内容,并在每个tasktracker上从nn1到nn2创建一个副本。
编辑 DistCp 使用 MapReduce 影响其分发、错误处理和恢复以及报告。
复制后,建议 one generates and cross-checks 源和目的地列表,以验证复制是否真正成功。由于distcp同时使用mapreduce和filesystem api,这三者中的任何一个或它们之间的问题都会对拷贝产生不利的影响。
编辑
我用来检查 source 以及 dist 检查文件的数量和每个文件的指定大小。这可以通过生成 manifest 在源头,然后在 dist 数量和大小。

相关问题