在具有相同大小但内容不同的hdfs上同步文件

时间:2018-01-16 20:58:25

标签: hadoop hive hadoop2 hortonworks-data-platform google-cloud-dataproc

我正在尝试使用distcp和airbnb reair实用程序将文件从一个hadoop clutster同步到另一个,但是它们都没有按预期工作。

如果源和目标上的文件大小相同,即使文件内容已更改(校验和也有所不同),它们都无法更新它们,除非不使用覆盖选项。

我需要保持大约30TB的同步数据,因此每次加载完整数据集都不可行。

如果文件大小相同(来源中的计数已更改)并且校验和各不相同,那么有人可以建议我如何使两个数据集同步。

1 个答案:

答案 0 :(得分:2)

DistCp处理大小相同但内容不同的文件之间的同步方式是通过比较其所谓的FileChecksumFileChecksum首次引入$out,主要是为了在DistCp中使用。不幸的是,这具有已知的缺点,即在不同的存储实现之间不兼容,甚至在具有不同内部块/块设置的HDFS实例之间不兼容。具体来说,FileChecksum采用的结构是,例如,每块512字节,每块128MB。

由于GCS没有相同的“块”或“块”概念,因此无法对FileChecksum进行任何类似的定义。通常与Hadoop一起使用的所有其他对象存储也是如此; HADOOP-3981在“DistCp和Object Stores”下讨论了这个事实。

也就是说,有一个巧妙的技巧可以用来为HDFS文件定义一个很好的标准化复合CRC表示,它与现有的HDFS部署大部分就地兼容;我已经向DistCp documentation appendix提交了一个概念证明,试图将其添加到上游,之后应该可以使其与GCS一起开箱即用,因为GCS也支持文件级CRC32C