Hive中的墓碑,压实和吸尘有什么区别?
我读到compaction / compactor是在Metastore中运行的一组后台进程,用于支持ACID事务。他们负责Hive的垃圾收集/内务管理。
我的问题是:
Hive中墓碑/吸尘的目的是什么?
如何在我的生产系统中实施?
当数据以文件格式存储且没有任何缓存时,为什么我们需要垃圾收集?
答案 0 :(得分:2)
在使用Multiversion concurrency control策略管理并发的数据库系统中,您的问题中的术语相当常见。在此策略中,数据更新和删除不会直接覆盖旧数据。相反,更新和删除会导致存储多个版本的数据(过时版本和更新版本)。同时运行的其他事务可以在继续查看其旧版本数据的同时完成。
将此问题与您的问题联系起来:
- Hive中墓碑/吸尘的目的是什么?
醇>
“Tombstone”通常是指当调用者调用删除事务而不是实际删除基础数据时,将一段数据标记为“逻辑删除”。在后续读取事务期间,使用逻辑删除标记的数据被视为已删除(未找到)。这可以避免违反其他并发事务的ACID隔离属性,因为他们可以继续查看他们对先前版本数据的看法。
- 如何在我的生产系统中实施?
醇>
Hive ACID事务在幕后实现这些技术。您只需正确设置configuration即可将其激活。
- 当数据以文件格式存储且没有任何缓存时,为什么我们需要垃圾收集?
醇>
引用有关Hive事务的文档的Basic Design部分:
HDFS不支持对文件进行就地更改。在面向附加到用户正在读取的文件的写入者时,它也不提供读取一致性。为了在HDFS之上提供这些功能,我们遵循其他数据仓库工具中使用的标准方法。表或分区的数据存储在一组基本文件中。新记录,更新和删除存储在增量文件中。为每个事务(或流式代理,例如Flume或Storm,每批事务)创建一组新的增量文件,用于更改表或分区。在读取时,阅读器会合并基本文件和增量文件,并在读取时应用任何更新和删除。
另外引用Delta File Compaction上的部分:
当操作修改表时,会创建越来越多的delta文件,需要进行压缩以保持足够的性能。
总而言之,Hive Transactions的实现在HDFS中生成基本文件和增量文件,但许多小的delta文件可能会影响性能,因此需要一个垃圾收集过程(压缩)来将小delta文件合并在一起。