2013-11-27 125 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的縮進是有目的地正確反映表的結構 –