2013-11-27 535 views
4

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

通过商务部的定义:

9.2.5。 hbase.regionserver.compactionQueueSize压缩队列的大小。这是该区域内已被 压缩目标的商店数量。

regionserver的Store(或商店文件?我听说过它的两个版本)的数量需要进行大规模压缩。

我有一份工作使用顺序键(非分布式)以热点风格写数据。 和我在量度历史中发现发现一次它发生了compaction-queue-size = 4. 这在理论上是不可能的,因为我在任何时候只有一个存储区(顺序键)写入。

然后我挖掘到的日志,发现有关于队列大小任何暗示> 0: 每一个主要的压实说“这一选择是在队列0秒”

013-11-26 12 :28:00,778 INFO [regionserver60020-smallCompactions-1385440028938] regionserver.HStore:在f1中完成3个文件的主要压缩 myTable.key.md5 .... into md5 ....(size = 607.8 M), 商店的总尺寸为645.8米。此选择排队等待0秒,并执行了39秒的 。

更令人困惑的是:在早期版本中是否启用多线程,并且只是将每个压缩作业分配给一个线程,因此为什么会存在压缩队列?

太糟糕了,在hbase doc中没有详细的解释。

回答

13

我不完全理解你的问题。但让我试着尽我所能回答这个问题。

首先让我们来谈谈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两者之间关键的。如果您的Table中有多个ColumnFamily,您将会得到一个Store,根据RegionColumnFamily。每个Store将有一个MemStore和0或更多StoreFiles

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

好的...那么什么是压实队列? 这是RegionServer中用于压缩的商店数量。同样,Flush队列是等待刷新的MemStore的数量。

至于为什么有一个队列,当你可以异步做到这一点,我不知道。这将是一个很好的问题在HBase邮件列表上询问。它往往有更快的响应时间。

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

+0

@giridhar的缩进是有目的地正确反映表的结构 –