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

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

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

如果源和目标上的文件大小相同,即使文件内容已更改(校验和也会变化),除非未使用覆盖选项,否则两者都无法更新它。

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

如果文件大小相同(源中的计数已更改)并且校验和不同,谁能建议我如何使两个数据集同步。

最佳答案

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

由于 GCS 没有相同的“ block ”或“ block ”概念,因此它不可能有任何类似的 FileChecksum 定义。 Hadoop 常用的所有其他对象存储也是如此; DistCp documentation appendix在“DistCp 和对象存储”下讨论了这一事实。

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

关于hadoop - 在具有相同大小但内容不同的 hdfs 上同步文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289719/

相关文章:

apache-spark - org.apache.spark.sql.AnalysisException:无法解决Spark SQL中的 'Column_name`异常

hadoop - 从以 orc 格式存储在 hdfs 中的文件创建配置单元表

hadoop - 读取 MapReduce 中一个 Mapper 中的下一行

java - hive 中的python udf

hadoop - Hive Metastore高可用性

hadoop - 将HDFS文件映射到外部驱动器时出错

scala - 如何合并SPARK数据框创建的文件夹中的所有零件文件并重命名为scala中的文件夹名称

Hadoop : sqoop : getting Unknown database 'sample' error even though database exist

mongodb - 从BSON文件创建Hive表时,列值变为NULL

hadoop - hadoop.tmp.dir和mapred.temp.dir和mapreduce.cluster.temp.dir有什么区别