HBase性能調(diào)整:配置

2018-09-21 14:51 更新

HBase配置

請(qǐng)參閱HBase重要配置一節(jié)的內(nèi)容。

管理壓縮

對(duì)于較大的系統(tǒng),管理link:[compactions and splits]可能是您需要考慮的事情。

hbase.regionserver.handler.count

[hbase.regionserver.handler.count]。

hfile.block.cache.size

請(qǐng)參見[hfile.block.cache.size]。RegionServer進(jìn)程的內(nèi)存設(shè)置。

Blockcache的預(yù)取選項(xiàng)

如果設(shè)置了列族或RegionServer屬性,HBASE-9857會(huì)在打開BlockCache時(shí)添加一個(gè)新選項(xiàng)來預(yù)取HFile內(nèi)容。此選項(xiàng)適用于HBase 0.98.3及更高版本。目的是在打開緩存后,使用內(nèi)存中的表數(shù)據(jù)盡可能快地預(yù)熱BlockCache,而不是將預(yù)取數(shù)計(jì)為緩存未命中。這對(duì)于快速讀取非常有用,但如果要預(yù)加載的數(shù)據(jù)不適合BlockCache,則不是一個(gè)好主意。它可用于調(diào)整預(yù)取的IO影響與所有數(shù)據(jù)塊在緩存中的時(shí)間之間的關(guān)系。

要在給定列族上啟用預(yù)取,可以使用HBase Shell或使用API??。

使用HBase Shell啟用預(yù)?。?/b>

hbase> create 'MyTable', { NAME => 'myCF', PREFETCH_BLOCKS_ON_OPEN => 'true' }

使用API??啟用預(yù)取

// ...
HTableDescriptor tableDesc = new HTableDescriptor("myTable");
HColumnDescriptor cfDesc = new HColumnDescriptor("myCF");
cfDesc.setPrefetchBlocksOnOpen(true);
tableDesc.addFamily(cfDesc);
// ...

要查看運(yùn)行中的預(yù)取,請(qǐng)?jiān)趆base-2.0 +中的org.apache.hadoop.hbase.io.hfile.HFileReaderImpl,或在HBase的早期版本,hbase-1.x中的org.apache.hadoop.hbase.io.hfile.HFileReaderV2中啟用TRACE級(jí)別登錄。

hbase.regionserver.global.memstore.size

請(qǐng)參見[hbase.regionserver.global.memstore.size]。通常根據(jù)需要為RegionServer進(jìn)程調(diào)整此內(nèi)存設(shè)置。

hbase.regionserver.global.memstore.size.lower.limit

請(qǐng)參見[hbase.regionserver.global.memstore.size.lower.limit]。通常根據(jù)需要為RegionServer進(jìn)程調(diào)整此內(nèi)存設(shè)置。

hbase.hstore.blockingStoreFiles

請(qǐng)參見[hbase.hstore.blockingStoreFiles]。如果RegionServer日志中存在阻塞,則增加此值可能有所幫助。

hbase.hregion.memstore.block.multiplier

請(qǐng)參見[hbase.hregion.memstore.block.multiplier]。如果有足夠的RAM,增加這個(gè)可以幫助。

hbase.regionserver.checksum.verify

讓HBase將校驗(yàn)和寫入數(shù)據(jù)塊,并保存在讀取時(shí)必須進(jìn)行校驗(yàn)和查找。

請(qǐng)參見[hbase.regionserver.checksum.verify],[hbase.hstore.bytes.per.checksum][hbase.hstore.checksum.algorithm]

調(diào)整callQueue選項(xiàng)

HBASE- 11355引入了幾種可以提高性能的callQueue調(diào)優(yōu)機(jī)制。

要增加callqueue的數(shù)量,請(qǐng)?jiān)O(shè)置hbase.ipc.server.num.callqueue為大于1的值。要將callqueue拆分為單獨(dú)的讀寫隊(duì)列,請(qǐng)將hbase.ipc.server.callqueue.read.ratio的值設(shè)置為0和1之間。此因素將隊(duì)列的權(quán)重賦給寫入(如果低于0.5)或讀?。ㄈ绻哂?.5)。另一種說法是,該因子決定了拆分隊(duì)列中有多少百分比用于讀取。以下示例說明了一些可能性。請(qǐng)注意,無論您使用何種設(shè)置,始終至少有一個(gè)寫入隊(duì)列。

  • 默認(rèn)值為0不拆分隊(duì)列。
  • 值0.3使用30%的隊(duì)列進(jìn)行讀取,60%用于寫入。如果hbase.ipc.server.num.callqueue的給定值為10,則3個(gè)隊(duì)列將用于讀取,7個(gè)用于寫入。
  • 值0.5使用相同數(shù)量的讀取隊(duì)列和寫入隊(duì)列。如果hbase.ipc.server.num.callqueue的給定值為10,則將5個(gè)隊(duì)列用于讀取,5個(gè)用于寫入。
  • 值0.6使用60%的隊(duì)列進(jìn)行讀取,30%用于寫入。如果hbase.ipc.server.num.callqueue的給定值為10,則7個(gè)隊(duì)列將用于讀取,3個(gè)用于寫入。
  • 值1.0使用一個(gè)隊(duì)列來處理寫請(qǐng)求,所有其他隊(duì)列處理讀請(qǐng)求。高于的值1.0具有與值相同的效果1.0。如果hbase.ipc.server.num.callqueue的給定值為10,則9個(gè)隊(duì)列將用于讀取,1個(gè)用于寫入。

您還可以拆分讀取隊(duì)列,以便通過設(shè)置hbase.ipc.server.callqueue.scan.ratio選項(xiàng)將單獨(dú)的隊(duì)列用于短讀?。▉碜訥et操作)和長(zhǎng)讀?。▉碜許can操作)。此選項(xiàng)是介于0和1之間的一個(gè)因子,它決定了用于獲取和掃描的讀取隊(duì)列的比率。如果值低于0.5,則使用更多隊(duì)列用于獲取,如果值高于0.5,則使用更多隊(duì)列進(jìn)行掃描。無論您使用何種設(shè)置,至少有一個(gè)讀取隊(duì)列用于Get操作。

  • 值為0不會(huì)拆分讀取隊(duì)列。
  • 一個(gè)值0.3使用60%的讀取隊(duì)列來用于獲取,30%用于掃描。如果hbase.ipc.server.num.callqueue給定的值為20,并且hbase.ipc.server.callqueue.read.ratio的值為0.5,那么10個(gè)隊(duì)列將用于讀取,在這10個(gè)隊(duì)列中,7個(gè)隊(duì)列用于獲取,3個(gè)隊(duì)列用于掃描。
  • 一個(gè)值0.5使用一半的讀取隊(duì)列用于獲取,另一半用于掃描。如果hbase.ipc.server.num.callqueue給定的值為20,并且hbase.ipc.server.callqueue.read.ratio的值為0.5,那么10個(gè)隊(duì)列將用于讀取,在這10個(gè)隊(duì)列中,5個(gè)隊(duì)列用于獲取,5個(gè)隊(duì)列用于掃描。
  • 一個(gè)值0.6使用30%的讀取隊(duì)列用于獲取,60%用于掃描。如果hbase.ipc.server.num.callqueue給定的值為20,并且hbase.ipc.server.callqueue.read.ratio的值為0.5,那么10個(gè)隊(duì)列將用于讀取,在這10個(gè)隊(duì)列中,3個(gè)隊(duì)列用于獲取,7個(gè)隊(duì)列用于掃描。
  • 一個(gè)值1.0將使用除一個(gè)讀取隊(duì)列之外的所有隊(duì)列進(jìn)行掃描。如果hbase.ipc.server.num.callqueue給定的值為20,并且hbase.ipc.server.callqueue.read.ratio的值為0.5,那么10個(gè)隊(duì)列將用于讀取,在這10個(gè)隊(duì)列中,10個(gè)隊(duì)列用于獲取,1個(gè)隊(duì)列用于掃描。

您可以使用新選項(xiàng)hbase.ipc.server.callqueue.handler.factor以編程方式調(diào)整隊(duì)列數(shù):

  • 值為0,使用所有處理程序之間的單個(gè)共享隊(duì)列。
  • 值為1,每個(gè)處理程序使用單獨(dú)的隊(duì)列。
  • 0和1之間的值,根據(jù)處理程序的數(shù)量調(diào)整隊(duì)列數(shù)。例如,值為0.5會(huì)在每?jī)蓚€(gè)處理程序之間共享一個(gè)隊(duì)列。擁有更多隊(duì)列(例如,在每個(gè)處理程序中有一個(gè)隊(duì)列的情況下)可以在將任務(wù)添加到隊(duì)列或從隊(duì)列中選擇任務(wù)時(shí)減少爭(zhēng)用。權(quán)衡的是,如果你有一些具有長(zhǎng)時(shí)間運(yùn)行任務(wù)的隊(duì)列,處理程序可能最終等待從該隊(duì)列執(zhí)行而不是處理具有等待任務(wù)的另一個(gè)隊(duì)列。

要使這些值在給定的區(qū)域服務(wù)器上生效,必須重新啟動(dòng)區(qū)域服務(wù)器。這些參數(shù)僅用于測(cè)試目的,應(yīng)謹(jǐn)慎使用。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)