天天看點

案例篇-HBase 實戰之 MOB 使用指南

1. 背景

HBase 可以很友善的将圖檔、文本等檔案以二進制的方式進行存儲。雖然 HBase 一般可以處理從 1 位元組到 10MB 大小的二進制對象,但是 HBase 通常對于讀寫路徑的優化主要是針對小于 100KB 的值。當 HBase 處理資料為 100KB~10MB 時, 由于分裂(split)和壓縮(compaction)會引起寫的放大,進而會降低 HBase 性 能。是以在 HBase2.0+引入了 MOB 特性,這樣保持了 HBase 的高性能、強一緻 性和低開銷。

若要啟用 MOB 功能,需要在每個 RegionServer 進行配置,并在建表或者修改表 時對指定列族啟用 MOB 特性。在 HBase 嘗鮮版中啟用 MOB 功能,需要由 admin 使用者設定定期程序,以重新優化 MOB 資料的分布。

2. 啟用和配置 RegionServer 上的 MOB 特性

增加或者修改 hbase-site.xml 檔案中的某些配置

2.1 設定 MOB 檔案的緩存配置

案例篇-HBase 實戰之 MOB 使用指南
說明:

  1. hbase.mob.file.cache.size 打開的檔案句柄緩存數,預設值是 1000。通 過增加檔案句柄數可以提高讀的性能,可以減少頻繁的打開、關閉檔案。若這個值設定過大,會導緻“too many opened file handers”。
  2. hbase.mob.cache.evict.period MOB 緩存淘汰緩存的 MOB 檔案時間間隔

    (以秒為機關),預設值為 3600 秒。

  3. hbase.mob.cache.evict.remain.ratio 當緩存的 MOB 檔案數 目超 過hbase.mob.file.cache.size 設定的數目後,會觸發 MOB 緩存淘汰機制 (eviction),0.5f 為剩餘的 MOB 緩存比率(0~1),預設的比率為 0.5f。

2.2 配置 MobMasterObserver 作為協處理器的 master

主要用于表在删除後,MOB 檔案的歸檔。

案例篇-HBase 實戰之 MOB 使用指南

MOB的管理 MOB 特性為 HBase 引入新的讀寫路徑,此時我們采用外部工具對其進行優化處理,一個是 expiredMobFileCleanerTTL 處理 TTL 和時間的過期資料,另一個是清理工具用來合并小的 MOB 檔案或者多次更新、删除的 MOB 檔案。

2.2.1 清理過期的 MOB 資料(expiredMobFileCleaner)

案例篇-HBase 實戰之 MOB 使用指南

設定清理延時

案例篇-HBase 實戰之 MOB 使用指南

2.2.2 清理工具

案例篇-HBase 實戰之 MOB 使用指南

屬性值設定如下:

案例篇-HBase 實戰之 MOB 使用指南
  1. hbase.mob.compaction.invalid.file.ratio 如果在 MOB 檔案中删除了太 多的單元格,則被視為作為無效檔案,需要重新寫入或者合并。當 MOB 檔案 (mobFileSize)大小減去存在的單元格(existingCellsSize)大小之差除 以 MOB 檔案(mobFileSize)的比率小于設定的值時,我們就認為其為無效 檔案。預設值為0.3f。
  2. hbase.mob.compaction.small.file.threshold 如果 MOB 的大小小于門檻值, 則視為小檔案,需要合并。預設值為64MB。
  3. hbase.mob.compaction.memstore.flush.size MOB 裡 memstore 大小,超過 此大小就會 flush,并且每個 sweep reducer 擁有各自 memstore。

警告

使用清理工具最壞的情況:MOB 檔案壓縮合并成功,但是相關的(put)更新失敗。 這意味着新的 MOB 檔案已經建立但未能将新的 MOB 檔案路徑。存入 HBase 中, 是以 HBase 不會指向這些 MOB 檔案。

小貼士

請檢查 yarn-site.xml 的配置,在 yarn.application.classpath 中添加 hbase 的安裝 路徑:$HBASE_HOME/ 和 hbase 的 lib 路徑: $HBASE_HOME/lib/

案例篇-HBase 實戰之 MOB 使用指南

在表中開啟 MOB 特性 a 将列族設定為 MOB

案例篇-HBase 實戰之 MOB 使用指南

2.2.3 設定 MOB 單元格的門檻值,預設為 102400

案例篇-HBase 實戰之 MOB 使用指南

對于用戶端而言,MOB 單元格操作和普通單元格類似。

2.2.4 插入 MOB 值

案例篇-HBase 實戰之 MOB 使用指南

2.2.5 擷取 MOB 值

案例篇-HBase 實戰之 MOB 使用指南

2.2.6 擷取 MOB 所有資料(raw =true)

案例篇-HBase 實戰之 MOB 使用指南

運作一個 MOB 示例

案例篇-HBase 實戰之 MOB 使用指南

繼續閱讀