我无法理解为什么主要压缩与次要压缩不同。据我所知,小压缩是将一些 HFile 合并为一个或多个 HFile。
而且我认为主要压缩几乎可以做同样的事情,除了处理已删除的行。
所以,我不知道为什么主要压缩会带回 HBase 的数据局部性(当它在 HDFS 上使用时)。
换句话说,为什么小压缩不能恢复数据局部性,尽管对我来说,小压缩和大压缩都只是将 HFile 合并到少量 HFile 中。
为什么只有主要压缩才能显着提高读取性能?我认为小压缩也有助于提高读取性能。
请帮我理解。
先感谢您。
最佳答案
在了解major和minor compactions的区别之前,需要从compaction的角度来了解影响性能的因素:
可以想象,由于重新启动和重新平衡,旧数据的位置较差的可能性更高。
现在,理解小压缩和大压缩之间区别的简单方法如下:
轻微压实 :这种压缩类型一直在运行,主要关注正在写入的新文件。由于是新的,这些文件很小,并且可以为旧文件中的数据提供删除标记。由于此压缩仅查看相对较新的文件,因此它不会触及/删除旧文件中的数据。这意味着在不同的压缩类型出现并删除旧数据之前,这种压缩类型即使从较新的文件中也无法删除删除标记,否则那些旧的已删除的 KeyValues 将再次可见。
这导致两个结果:
主要压实 :这种类型的压缩很少运行(默认情况下每周一次)并且专注于完全清理存储(一个区域内的一个列族)。主要压缩的输出是一个存储的一个文件。由于主要压缩会重写存储中的所有数据,因此它可以删除删除标记和被这些删除标记标记为已删除的旧键值。
这也导致了两个结果:
有关 HBase 压缩的更多信息:HBase Book
关于hdfs - HBase:Minor 和 Major Compaction 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63650713/