HBase的寫效率還是很高的,但其隨機(jī)讀取效率并不高
可以采取一些優(yōu)化措施來提高其性能,如:
1. 啟用lzo壓縮,見這里
2. 增大hbase.regionserver.handler.count數(shù)為100
3. 增大hfile.block.cache.size為0.4,提高cache大小
4. 增大hbase.hstore.blockingStoreFiles為15
5. 啟用BloomFilter,在HBase0,89中可以設(shè)置
6.Put時(shí)可以設(shè)置setAutoFlush為false,到一定數(shù)目后再flushCommits
在14個(gè)Region Server的集群上,新建立一個(gè)lzo壓縮表
測試的Put和Get的性能如下:
1. Put數(shù)據(jù):
單線程灌入1.4億數(shù)據(jù),共花費(fèi)50分鐘,每秒能達(dá)到4萬個(gè),這個(gè)性能確實(shí)很好了,不過插入的value比較小,只有不到幾十個(gè)字節(jié)
多線程put,沒有測試,因?yàn)閱尉€程的效率已經(jīng)相當(dāng)高了
2. Get數(shù)據(jù):
在沒有任何Block Cache,而且是Random Read的情況:
單線程平均每秒只能到250個(gè)左右
6個(gè)線程平均每秒能達(dá)到1100個(gè)左右
16個(gè)線程平均每秒能達(dá)到2500個(gè)左右
有BlockCache(曾經(jīng)get過對(duì)應(yīng)的row,而且還在cache中)的情況:
單線程平均每秒能到3600個(gè)左右
6個(gè)線程平均每秒能達(dá)到1.2萬個(gè)左右
16個(gè)線程平均每秒能達(dá)到2.5萬個(gè)左右