hbase實戰之mob使用指南
hbase可以很方便的將、文字等檔案以二進位制的方式進行儲存。雖然hbase一般可以處理從1位元組到10mb大小的二進位制物件,但是hbase通常對於讀寫路徑的優化主要是針對小於100kb的值。當hbase處理資料為100kb~10mb時,由於**(split)和壓縮(compaction)會引起寫的放大,從而會降低hbase效能。所以在hbase2.0+引入了mob特性,這樣保持了hbase的高效能、強一致性和低開銷。
若要啟用mob功能,需要在每個regionserver進行配置,並在建表或者修改表時對指定列族啟用mob特性。在hbase嘗鮮版中啟用mob功能,需要由admin使用者設定定期程序,以重新優化mob資料的分布。
啟用和配置regionserver上的mob特性
增加或者修改hbase-site.xml檔案中的某些配置
1 設定mob檔案的快取配置
hbase.mob.file.cache.size
1000
hbase.mob.cache.evict.period
3600
hbase.mob.cache.evict.remain.ratio
0.5f
說明:
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 配置mobmasterobserver作為協處理器的master,主要用於表在刪除後,mob檔案的歸檔。
hbase.coprocessor.master.classes
org.apache.hadoop.hbase.coprocessor.mobmasterobserver
mob的管理mob特性為hbase引入新的讀寫路徑,此時我們採用外部工具對其進行優化處理,乙個是expiredmobfilecleanerttl處理ttl和時間的過期資料,另乙個是清理工具用來合併小的mob檔案或者多次更新、刪除的mob檔案。
a . 清理過期的mob資料(expiredmobfilecleaner)
org.apache.hadoop.hbase.mob.compactions.expiredmobfilecleaner tablename familyname
設定清理延時
hbase.mob.cleaner.delay
60 * 60 * 1000
清理工具
org.apache.hadoop.hbase.mob.compactions.sweeper tablename familyname
屬性值設定如下:
hbase.mob.compaction.invalid.file.ratio
0.3f
hbase.mob.compaction.small.file.threshold
67108864
hbase.mob.compaction.memstore.flush.size
134217728
說明:
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檔案。
$hadoop_conf_dir
$hadoop_common_home/*,$hadoop_common_home/lib/*
$hadoop_hdfs_home/*,$hadoop_hdfs_home/lib/*,
$hadoop_mapred_home/*,$hadoop_mapred_home/lib/*
$hadoop_yarn_home/*,$hadoop_yarn_home/lib/*
$hbase_home/*, $hbase_home/lib/*
在表中開啟mob特性a 將列族設定為mob
hcolumndescriptor hcd = new hcolumndescriptor(「f」);
hcd.setvalue(mobconstants.is_mob, bytes.tobytes(boolean.true));
b 設定mob單元格的閾值,預設為102400
hcolumndescriptor hcd;
hcd.setvalue(mobconstants.mob_threshold, bytes.tobytes(102400l);
對於客戶端而言,mob單元格操作和普通單元格類似。
c 插入mob值
keyvalue kv = new keyvalue(row1, family, qf1, ts, keyvalue.type.put, value );
put put = new put(row1);
put.add(kv);
region.put(put);
d 獲取mob值
scan scan = new scan();
internalscanner scanner = (internalscanner) region.getscanner(scan);
scanner.next(result, limit);
e 獲取mob 所有資料(raw =true)
scan scan = new scan();
scan.setattribute(mobconstants.mob_scan_raw, bytes.tobytes(boolean.true));
internalscanner scanner = (internalscanner) region.getscanner(scan);
scanner.next(result, limit);
執行乙個mob示例
sudo -u hbase hbase org.apache.hadoop.hbase.integrationtestingestmob
案例篇 HBase 實戰之 MOB 使用指南
1.背景 hbase 可以很方便的將 文字等檔案以二進位制的方式進行儲存。雖然 hbase 一般可以處理從 1 位元組到 10mb 大小的二進位制物件,但是 hbase 通常對於讀寫路徑的優化主要是針對小於 100kb 的值。當 hbase 處理資料為 100kb 10mb 時,由於 split 和...
案例篇 HBase 實戰之 MOB 使用指南
1.背景 hbase 可以很方便的將 文字等檔案以二進位制的方式進行儲存。雖然 hbase 一般可以處理從 1 位元組到 10mb 大小的二進位制物件,但是 hbase 通常對於讀寫路徑的優化主要是針對小於 100kb 的值。當 hbase 處理資料為 100kb 10mb 時,由於 split 和...
GitHub 實戰使用指南
本篇文章只描寫重點的幾個命令,以方便工作使用 圖形介面內操作 開啟 git base 在空資料夾 clone 遠端倉庫 git clonecd 進入目錄 git fetch allgit reset hard origin mastergit checkout devgit checkout b d...