什么是HBase compaction-queue-size?

时间:2013-11-27 00:49:39

标签: hadoop nosql hbase

任何人都知道区域服务器队列大小是什么意思?

按照doc的定义:

  

9.2.5。 hbase.regionserver.compactionQueueSize压缩队列的大小。这是该地区的商店数量   针对压实。

区域服务器的Store(或商店文件?我听过它的两个版本)的数量需要主要压缩。

我有一个使用顺序密钥(非分布式)以热点样式编写数据的工作。 我在公制历史中看到,发现它一次发生了一个compaction-queue-size = 4。 这在理论上是不可能的,因为我在任何时候只有一个Store(顺序键)。

然后我深入了解日志,发现有任何关于队列大小的提示> 0: 每个主要的压缩都说“这个选择在队列中0秒”

  

013-11-26 12:28:00,778 INFO   [regionserver60020-smallCompactions-1385440028938]   regionserver.HStore:完成了f1中3个文件的主要压缩   myTable.key.md5 ....   进入md5 ....(尺寸= 607.8 M),总尺寸为   store为645.8 M. 此选择在队列中0秒,耗时39秒   执行。

更令人困惑的是:在早期版本中是不是启用了多线程,只是将每个压缩作业分配给一个线程,这就是为什么存在压缩队列?

太糟糕了,hbase doc中没有详细说明。

1 个答案:

答案 0 :(得分:14)

我不完全理解你的问题。但是,让我尽力回答它。

首先让我们谈谈HBase的一些术语。 Source

Table       (HBase table)
  Region      (Regions for the table)
    Store       (Store per ColumnFamily for each Region for the table)
      MemStore    (MemStore for each Store for each Region for the table)
      StoreFile   (StoreFiles for each Store for each Region for the table)
        Block       (Blocks within a StoreFile within a Store for each Region for the table)

HBase中的Region被定义为两个行键之间的Rows。如果ColumnFamily中有多个Table,则StoreColumnFamily Region Store。每个MemStore都会有StoreFiles和0个或更多{{1}}

在刷新MemStore时会创建StoreFiles。每隔一段时间,后台线程就会触发压缩以保持文件的数量。压缩有两种类型:主要和次要。当Store以轻微压缩为目标时,它还会拾取一些相邻的StoreFiles并将其重写为一个。轻微压缩不会删除已删除/过期的数据。如果次要压缩在商店中获取所有StoreFiles,则会将其提升为主要压缩。在主要压缩中,商店的所有StoreFiles都被重写为一个StoreFile。

好的......那么什么是压缩队列? 它是已成为压缩目标的RegionServer中的商店数。类似地,Flush Queue是等待刷新的MemStore的数量。

关于为何可以异步进行排队的问题,我不知道。这对于HBase邮件列表来说是一个很好的问题。它往往有更快的响应时间。

编辑:压缩队列不占用RegionServer的100%资源。