问题描述
众所周知,HDFS 基本上是一个对象存储系统,其中的数据一旦写入就无法更新,但整个文件必须作为一个整体被覆盖。如果是这种情况,那么需要将 ORC 格式引入 HDFS 以允许我们修改/更新存储在底层存储系统为 HDFS 的 hive 表中的数据。
这使得 HDFS 成为一个块存储,其中的数据可以更新/修改,这与整个 Hadoop 框架相矛盾
解决方法
ORC 对 ACID 事务的(有限)支持并没有改变 HDFS 是只写的事实。有关说明,请参阅 https://orc.apache.org/docs/acid.html。 ORC 中的更新只是简单地写入 HDFS 中的新文件,因此快速写入单个事务会产生许多新文件,从而导致严重的性能问题。
,首先我们应该熟悉 HDFS 上 ORC 和列数据格式的历史。正如名称所示,最初 HDFS 被设计为一个文件系统。这意味着人们希望以可扩展的方式存储“文件”。
最初 ORC 和 Parquet 不支持更新,因为在长期读取高效的存储解决方案中进行更新等修改没有意义。数据应该是不可变的并且非常有效地存储。像往常一样,一些企业公司认为客户永远是对的,并进行了修改。他们称这个过程在 ORC 页面上趋于成熟。我认为这是一个有问题的功能,我不推荐给我的客户。
这使得 HDFS 成为一个块存储,其中的数据可以更新/修改,这与整个 Hadoop 框架相矛盾
情况并非如此,因为实际的实现是有额外的文件而不是进行就地更新。