我想将一些文件从一个位置移动到另一个位置[这两个位置都在hdfs上],并需要验证数据是否正确移动。
为了比较移动的数据,我考虑计算两个文件的哈希代码,然后比较它们是否相等。如果相等,我会将数据移动称为正确的,否则数据移动不会正确发生。
但我有几个问题要问。
我首先需要使用hashcode技术吗?我使用的是mapr发行版,我在某处读到数据移动完成后,在后端实现对数据的哈希处理,并确保数据已正确传输。那么,当数据在hdfs中移动时,是否保证了数据的一致性,并且在移动过程中不会插入异常?
我是否可以使用其他方法来确保跨位置移动的数据是一致的?
提前谢谢。
2条答案
按热度按时间o8x7eapl1#
在hdfs中,move不会在数据节点上物理地移动数据(块)。它实际上改变了hdfs元数据中的名称空间。其中,将数据从一个hdfs位置复制到另一个hdfs位置有两种方法;
复制
并行拷贝分发
在一般情况下,它不会检查块的完整性。如果您想在将文件从一个位置复制到同一hdfs集群中的另一个位置时保持数据完整性,请通过修改fsshell.java类来使用校验和概念,或者使用hdfs java api编写您自己的类。
在distcp的情况下,hdfs检查数据完整性,同时将数据从一个hdfs集群复制到另一个hdfs集群。
aelbi1ox2#
您正在询问有关数据复制的问题。只需使用distcp。
distcp(distributed copy)是一种用于大型集群间/集群内复制的工具。它使用mapreduce实现其分发、错误处理和恢复以及报告。
这将把nn1上的/foo/bar下的名称空间扩展到一个临时文件中,在一组Map任务中划分其内容,并在每个tasktracker上从nn1到nn2创建一个副本。
编辑
DistCp
使用MapReduce
影响其分发、错误处理和恢复以及报告。复制后,建议
one generates and cross-checks
源和目的地列表,以验证复制是否真正成功。由于distcp同时使用mapreduce和filesystem api,这三者中的任何一个或它们之间的问题都会对拷贝产生不利的影响。编辑
我用来检查
source
以及dist
检查文件的数量和每个文件的指定大小。这可以通过生成manifest
在源头,然后在dist
数量和大小。