減少zk
超時時間(建議
1分鐘)
rs與zk的
timeout
預設為3
分鐘,由
zookeeper.session.timeout property
決定。也就是說,如果乙個
rs掛了,那麼
master需要3
分鐘之後才能對其進行重啟和恢復。建議調成
1分鐘會更低。
然而,你調低之前應該先確保jvm
的配置合理,保證不會引發較長的gc,
jvm配置之後會給出,也可以只這樣,只要你超時時間可以忍受
gc停頓即可。
增加handlers
(建議100)
配置項 hbase.regionserver.handler.count
決定了使用者表接受外來請求的執行緒數。預設為
10。這個數目主要看你的場景。如果是
put百萬位元組或者大量的
scan
你可以把它調低來減少對
region
的壓力。如果是小的
puts gets
則增加該值來挺高併發量。從而增加整體的吞吐。
handler數量最好小於
clinet
併發量。乙個典型場景就是多
gets
(可能是個**,然後從
hbase
獲取資料)。
調高之後的風險就是,一旦很多的併發寫壓到了乙個rs
上面,那麼記憶體會陡增,可能引發
oom。另外,
rs的記憶體不足會引發較長的
gc停頓。
增加heap(稍好的8g,差點的自己定吧)
對於hbase
當然是越大約好,因為他就是吃記憶體的東西。稍微好點的機器可以給8g,
master
相比rs
不需要更多的記憶體,但是
rs一定需要。
開啟lzo壓縮
增加region
的大小(100g,幾乎永不**)
選項hbase.hregion.max.filesize
預設為256m
,如果region
大小超過他則會**為二,如果你的資料量增長的比較快,那麼還是建議把這個大小調高,可以調成
100g
,因為越少的
region
你的集群越流暢,
100g
的閾值基本可以避免你的
region
增長過快,甚至你的
region
數目會長期不變。當然大
region
在compaction
時也會更加緩慢。幾十g的
region
啟動和compaction
都非常的慢,如果
storefile
較多,乙個
compaction
可能會持續幾天。
block cache size(讀寫平衡0.3)
選項perf.hfile.block.cache.size
預設是0.2
。調優這個引數需要你自己的觀察,可以參照
hbase
權威指南的
394頁。
其實常見場景還是讀業務比較多的時候可以把它調高。這樣可以快取更多的資料。讀寫平衡可以設定為0.3
。需要注意的是,block.cache.size memstore limits
這些記憶體加起來不要超過
60%。因為剩餘的記憶體還要用來做其他事情。否則容易
oom。
memstore limits(寫多則調高,讀多則調低)
這裡主要由兩個配置項決定:hbase.regionserver.global.memstore.upper
預設0.4
和hbase.region.server.global.memstore.lowerlimit
預設0.35
。後者主要是當伺服器需要釋放記憶體時強制
rs進行
flush
(不一定達到
flush size
)。盡量保證上面兩個值接近,這樣可以避免頻繁的
flush
。如果你的讀業務比較多,那麼調低他們。如果寫多,則調高他們。(注意讀寫的引數相加最好不要超過0.6
)。如果你發現
flush
很頻繁,那麼調高上面兩個配置,這樣減少頻繁的
i/o。
調高blocking store files(10)
選項hbase.hstore.blockingstorefiles
預設為7
,如果超過其設定閾值,則會阻塞
client
的寫。它主要是為了給
compaction
更多的時間來減少
store files
的數量。如果你是持續寫入,那麼稍微調高一點,比如
10。你可以觀察rs的
storefile
的數量,如果數量一直比較高,那麼就不要把這個閾值調高了。因為持續很多的
sf會讓機器一直
compaction
,造成的一種情況就是
compaction
和flush
的速度不匹配,然後持續的堆積
compaction
的任務,rs和
dn的連線數會越來越大,直到
too many open files
。調高block multiplier(穩定資料寫入不必調正,資料量比較大或者偶爾出現峰值則調高)
選項hbase.hregion.memstore.block.multiplier
預設為2
。它是一種安全機制,如果
memstores
超過了flushsize
的multiplier
倍則會阻塞客戶端的寫。
減少maximum logfiles(匯入資料直接關閉wal即可,寫多則調高,一般情況下小一點比較好)
選項hbase.regionserver.maxlogs
預設為32
。它只要是控制
wal檔案
flush
的頻率。如果寫操作比較多,那麼可以設定高一點。調低可以讓
rs更快的把資料持久化,那麼就可以直接棄掉
wal了。其實寫操作比較多可以直接把
wal關閉,這樣更省事了。
HBase之效能優化
3.讀表操作 3.1 多htable併發讀 建立多個htable客戶端用於讀操作,提高讀資料的吞吐量,乙個例子 static final configuration conf hbaseconfiguration.create static final string table log name u...
HBase之效能優化 一
1.1 pre creating regions 預設情況下,在建立hbase表的時候會自動建立乙個region分割槽,當匯入資料的時候,所有的hbase客戶端都向這乙個region寫資料,直到這個region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先建立一些空的regions,這...
Hbase效能優化
1 表的設計 1.1 pre creating regions 預設情況下,在建立hbase表的時候會自動建立乙個region分割槽,當匯入資料的時候,所有的hbase客戶端都向這乙個region寫資料,直到這個region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先建立一些空的re...