什么是Homb中的墓碑,压实和吸尘?

时间:2017-07-19 22:09:33

标签: hadoop hive hdfs

Hive中的墓碑,压实和吸尘有什么区别?

我读到compaction / compactor是在Metastore中运行的一组后台进程,用于支持ACID事务。他们负责Hive的垃圾收集/内务管理。

我的问题是:

  1. Hive中墓碑/吸尘的目的是什么?

  2. 如何在我的生产系统中实施?

  3. 当数据以文件格式存储且没有任何缓存时,为什么我们需要垃圾收集?

1 个答案:

答案 0 :(得分:2)

在使用Multiversion concurrency control策略管理并发的数据库系统中,您的问题中的术语相当常见。在此策略中,数据更新和删除不会直接覆盖旧数据。相反,更新和删除会导致存储多个版本的数据(过时版本和更新版本)。同时运行的其他事务可以在继续查看其旧版本数据的同时完成。

将此问题与您的问题联系起来:

  
      
  1. Hive中墓碑/吸尘的目的是什么?
  2.   

“Tombstone”通常是指当调用者调用删除事务而不是实际删除基础数据时,将一段数据标记为“逻辑删除”。在后续读取事务期间,使用逻辑删除标记的数据被视为已删除(未找到)。这可以避免违反其他并发事务的ACID隔离属性,因为他们可以继续查看他们对先前版本数据的看法。

“吸尘”通常是指数据库系统扫描之前用墓碑标记并物理删除它的数据的过程。物理删除通常执行其他用户事务的异步以获得更好的性能。 Hive文档对此活动使用术语“压缩”。

  
      
  1. 如何在我的生产系统中实施?
  2.   

Hive ACID事务在幕后实现这些技术。您只需正确设置configuration即可将其激活。

  
      
  1. 当数据以文件格式存储且没有任何缓存时,为什么我们需要垃圾收集?
  2.   

引用有关Hive事务的文档的Basic Design部分:

  

HDFS不支持对文件进行就地更改。在面向附加到用户正在读取的文件的写入者时,它也不提供读取一致性。为了在HDFS之上提供这些功能,我们遵循其他数据仓库工具中使用的标准方法。表或分区的数据存储在一组基本文件中。新记录,更新和删除存储在增量文件中。为每个事务(或流式代理,例如Flume或Storm,每批事务)创建一组新的增量文件,用于更改表或分区。在读取时,阅读器会合并基本文件和增量文件,并在读取时应用任何更新和删除。

另外引用Delta File Compaction上的部分:

  

当操作修改表时,会创建越来越多的delta文件,需要进行压缩以保持足够的性能。

总而言之,Hive Transactions的实现在HDFS中生成基本文件和增量文件,但许多小的delta文件可能会影响性能,因此需要一个垃圾收集过程(压缩)来将小delta文件合并在一起。