HBase效能調優之模式設計

2021-07-07 10:43:41 字數 2221 閱讀 7742

目前還不能在兩個及以上column families上執行良好,建議1個,參考on the number of column families。

盡可能短,另外使用壓縮,參見try to minimize row and column sizes。

每個表的regionsize可以被設定通過htabledescriptor,它會覆蓋預設配置檔案中的設定,具體怎麼設定,參考前面一篇文章:容量規劃和region配置。

bloom filter過濾器作為一種資料結構,它別設計為**乙個給定的元素是否屬於一組元素集合。從bloom filter過濾器返回的資料不一定是完全準確的,它主要應用於大資料集(大到hash機制無法容忍),並能提供足夠準的返回結果。更多bloom filter過濾器相關資訊,參加

對hbase而言,bloom filter過濾器提供了輕量級的記憶體模型,去減少磁碟的讀,當給定乙個get操作(bloom filter對scans無效),它只會去查詢相關行的storefiles,並行的讀性更能提公升不少。

bloom filter過濾器本身儲存在hfile的元資料中,它們不需要更新,當乙個部署在regionserver上region時,hfile是開啟的,這時bloom filter過濾器會被載入至記憶體。

hbase包含了很多有關bloom filter過濾器的調優引數,如調整塊大小,提高命中率等。

從hbase 0.96開始,bloom filter過濾器被預設開啟,基於row-based

更多有關hbase的bloom filter過濾器,參見bloom filters,相關討論參見how are bloom filters used in hbase?。

從hbase 0.96開始,基於row-based的bloom filter被預設使用,根據資料特徵和如何載入至hbase,你也可以更改為基於row+column的bloom filter。

為了確定bloom filters是否有積極的影響,檢視regionserver metrics選項上的blockcachehitratio值是否有所提公升。如果bloom filters開啟了,blockcachehitratio值應該是會提公升的,因為bloom filters過濾了不需要的blocks。

可以選擇基於row+column的bloom filter,但是如果是scan所有的行,這種選擇沒任何益處。當有大量的column-level puts,這樣一行可能位於任何storefile,基於row-based的bloom filter不是很奏效,基於row+columnbloom filter是不錯的選擇,排除一行只有乙個column,那麼bloom filter需要更多空間儲存keys。當乙個資料實體的大小至少千位元組時,bloom filter會相當奏效。

當資料被儲存在幾個大的storefiles,低速的scans去查詢特定的行時,會避免額外的磁碟io。

bloom filter在執行刪除操作時需要重建,所以不要產生大量的刪除操作。

bloom filters基於column family使能,可以使用hbase api中hcolumndescriptor設定,也可以在hbase shell中設定,如下:

hbase> create 'mytable',
表的每個columnfamily都可以設定blocksize,預設是64k,大的cell values需要大的blocksizes,blocksizes與storefile indexes是反相關的。更多參見hcolumndescriptor。

columnfamilies可以被設定為in-memory,在block cachein-memoryblocks擁有最高優先順序,但不保證整個表都被放入記憶體。參見hcolumndescriptor。

生產環境一般都會在columnfamily上定義壓縮,參考compression and data block encoding in hbase.

當資料在in-memory(如在memstore)或者正在寫(在regionserver和client之間傳輸),它是不會被壓縮的。更多參考try to minimize row and column sizes。

關於近期HBase系統設計開發和效能調優的一些小結

1.全域性查詢策略 應該一邊倒地依賴索引進行查詢,保證絕大多數的查詢是秒級返回。盡量避免動用全表掃瞄,讓全表掃瞄僅服務於非常有限的 生僻 查詢!實現這種格局需要盡可能地保證索引輕量短小 盡量縮短位元組 然後建立多倍於主資料的索引資料 我們基於配置建立索引的機制保證了增加一條索引的工作量是可以忽略不計...

HBASE引數調優

zookeeper.session.timeout預設值 3分鐘 180000ms 說明 regionserver與zookeeper間的連線超時時間。當超時時間到後,reigonserver會被zookeeper從rs集群清單中移除,hmaster收到移除通知後,會對這台server負責的regi...

HBase集群調優

2.5.2.1.zookeeper.session.timeout 這個預設值是3分鐘。這意味著一旦乙個server宕掉了,master至少需要3分鐘才能察覺到宕機,開始恢復。你可能希望將這個超時調短,這樣master就能更快的察覺到了。在你調這個值之前,你需要確認你的jvm的gc引數,否則乙個長時...