1. 程式人生 > >HBase MOB(Medium Object)使用入門指南

HBase MOB(Medium Object)使用入門指南

本文將詳細地介紹 HBase MOB 的使用,本指南適合入門的開發者。

將不同大小的檔案(比如圖片、文件等)儲存到 HBase 非常的簡單方便。從技術上來說,HBase 可以直接在一個單元格(Cell)儲存大小到10MB的二進位制物件。然而,HBase 正常的讀寫路徑僅僅對小於 100KB 的值進行了優化;當 HBase 處理大量大小到 10MB 的二進位制物件時,由於分割(splits)和壓縮(compactions)引起的寫放大(write amplification),會導致效能的下降。

一種解決這個問題的辦法是將大於 100KB 的物件直接儲存到 HDFS,然後將這些檔案的引用直接儲存在 HBase 中,這就是本文介紹的 MOB 特性,詳見 HBASE-11339。本文僅僅簡單地介紹 MOB 的使用,關於 MOB 的具體實現請自行Google,或直接閱讀相關原始碼。

前置條件

為了使用 MOB,你必須將 HFile 的版本設定為 3,如下

<property>
  <name>hfile.format.version</name>
  <value>3</value>
</property>

在 HBase 表中使用 MOB

我們可以通過 HBase Shell 在建立表或者直接修改已有表的屬性。我們還可以通過 HBase 的 Java API 來設定,具體如下。

通過 HBase Shell

hbase> create 'iteblog', {NAME =
> 'f', IS_MOB => true, MOB_THRESHOLD => 102400} 或 hbase> alter 'iteblog', {NAME => 'f', IS_MOB => true, MOB_THRESHOLD =>102400}

其中

  • IS_MOB:是一個 Boolean 值選項,指定當前列族是否啟用 MOB 功能;
  • MOB_THRESHOLD:指定多大的物件當做 MOB 來儲存,單位為位元組。如果你沒有指定 MOB_THRESHOLD 的值,預設是 100KB;也就是說如果你在 HBase 中寫入的物件大於這個尺寸,這個物件就會被當做 MOB 來處理。

通過 Java API

HColumnDescriptor hcd = new HColumnDescriptor("f");
hcd.setMobEnabled(true);
hcd.setMobThreshold(102400L);

HBase MOB 快取相關引數

因為隨時都可能存在大量 MOB 檔案,與 HFiles 的數量相比,MOB 檔案並不總是保持開啟狀態。 MOB檔案讀取器快取是 LRU 快取,它將最近使用的 MOB 檔案保持開啟狀態。下面引數用於調整 HBase MOB 快取。

<property>
    <name>hbase.mob.file.cache.size</name>
    <value>1000</value>
    <description>
      快取開啟檔案控制代碼的個數。如果該值設定的比較大,cache 可以快取更多的檔案控制代碼,
      從而降低開啟關閉檔案的頻率。但是如果該值設定過大會導致開啟的檔案控制代碼數過多。
      預設值是:“1000”。此引數在服務端 ResionServer 上配置。
    </description>
</property>
 
<property>
    <name>hbase.mob.cache.evict.period</name>
    <value>3600</value>
    <description>
      MOB cache 回收快取的 Mob 檔案的週期,預設是3600s。
    </description>
</property>
 
<property>
    <name>hbase.mob.cache.evict.remain.ratio</name>
    <value>0.5f</value>
    <description>
      MOB cache 回收之後保留的檔案個數佔cache容量個數的比例,當快取的檔案
      個數超過 hbase.mob.file.cache.size 設定的值之後會觸發Mob cache 回收。
    </description>
</property>

測試 MOB 儲存和檢索效能

HBase 提供了一個 Java 實用程式
在這裡插入圖片描述以幫助測試 MOB 功能併為您的情況決定適當的配置值。 該實用程式執行如下:

$ sudo -uiteblog hbase org.apache.hadoop.hbase.IntegrationTestIngestMOB  \
            -threshold 102400                                            \
            -minMobDataSize 512                                          \
            -maxMobDataSize 5120

其中

  • threshold Cell 大小達到多少閾值就認為是 MOB,預設是 1 kB,單位是位元組。
  • minMobDataSize MOB 資料大小的最小值. 預設為 512 B,單位是位元組。
  • maxMobDataSize MOB 資料大小的最大值. 預設為 5K,單位是位元組。

手動壓縮 MOB 檔案

為了能夠手動壓縮 MOB 檔案,HBASE-13012 中引入了 compact_mob 和 major_compact_mob 命令用於手動觸發 MOB 檔案的壓縮,而不是等到相應的配置時間。這些命令中的每一個引數都是表名,第二個可選引數為列族名。如果指定了列族名,則僅壓縮該列族的檔案。否則將壓縮所有啟用 MOB 的列族檔案。

hbase> compact_mob 'iteblog'
hbase> compact_mob 'iteblog', 'f'
hbase> major_compact_mob 'iteblog'
hbase> major_compact_mob 'iteblog', 'f'

同時,我們也可以使用 Admin 類中提供的 API 進行壓縮:

void    compact(TableName tableName)
void    compact(TableName tableName, byte[] columnFamily)
void    majorCompact(TableName tableName)
void    majorCompact(TableName tableName, byte[] columnFamily)

MOB Sweeper

為了能夠移除那些沒有引用的 MOB 或者將小檔案合併成大的檔案,HBase 在 HBASE-11644 中引入了一個叫做 sweep tool 的清潔者,其內部使用的是 MapReduce。這個功能涉及到的引數如下

<property>
    <name>hbase.mob.sweep.tool.compaction.ratio</name>
    <value>0.5f</value>
    <description>
      如果一個 MOB 檔案中,未被刪掉的 Cell 大小總和佔該 MOB 檔案
      大小的百分比小於該比例,該 MOB 檔案被看作是一個無效的檔案,
      需要合併。此引數在客戶端配置。
    </description>
</property>
 
<property>
    <name>hbase.mob.sweep.tool.compaction.mergeable.size</name>
    <value>134217728</value>
    <description>
     如果 MOB 檔案的大小小於該值,該檔案被認為是一個小檔案需要合
      並。預設值是128MB。此引數在客戶端配置。
    </description>
</property>
 
<property>
    <name>hbase.mob.sweep.tool.compaction.memstore.flush.size</name>
    <value>134217728</value>
    <description>
      掃描作業使用的 memstore 的重新整理大小。 每個 sweep reducer 
      都擁有一個memstore。預設值是128MB。此引數在客戶端配置。
    </description>
</property>
 
<property>
    <name>hbase.master.mob.ttl.cleaner.period</name>
    <value>86400</value>
    <description>
      ExpiredMobFileCleanerChore 的執行週期,以秒為單位。預設值是
      一天(86400秒)。注意:如果生存時間值過期了,即檔案從建立起已經
      超過了24小時,則 MOB 檔案將會被過期mob檔案清理工具刪除。
    </description>
</property>

轉載至
https://www.iteblog.com/archives/2441.html