Hbase效能優化之配置

2021-06-20 00:35:41 字數 3176 閱讀 4853

減少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...