開頭
需要hbase具有實(shí)時(shí)讀取數(shù)據(jù)的時(shí)效,但如果利用不好,哪些hbase也不能為我們好好利用,為了更好讓hbase寫入性能的提升,哪些我們應(yīng)該要注意以下相當(dāng)事項(xiàng)。
是否需要寫WAL(Write-Ahead-Log)?WAL是否需要同步寫入?
優(yōu)化原理:數(shù)據(jù)寫入流程可以理解為一次順序?qū)慦AL+一次寫緩存,通常情況下寫緩存延遲很低,因此提升寫性能就只能從WAL入手。WAL機(jī)制一方面是為了確保數(shù)據(jù)即使寫入緩存丟失也可以恢復(fù),另一方面是為了集群之間異步復(fù)制。默認(rèn)WAL機(jī)制開啟且使用同步機(jī)制寫入WAL。首先考慮業(yè)務(wù)是否需要寫WAL,通常情況下大多數(shù)業(yè)務(wù)都會(huì)開啟WAL機(jī)制(默認(rèn)),但是對(duì)于部分業(yè)務(wù)可能并不特別關(guān)心異常情況下部分?jǐn)?shù)據(jù)的丟失,而更關(guān)心數(shù)據(jù)寫入吞吐量,比如某些推薦業(yè)務(wù),這類業(yè)務(wù)即使丟失一部分用戶行為數(shù)據(jù)可能對(duì)推薦結(jié)果并不構(gòu)成很大影響,但是對(duì)于寫入吞吐量要求很高,不能造成數(shù)據(jù)隊(duì)列阻塞。這種場(chǎng)景下可以考慮關(guān)閉WAL寫入,寫入吞吐量可以提升2x~3x。退而求其次,有些業(yè)務(wù)不能接受不寫WAL,但可以接受WAL異步寫入,也是可以考慮優(yōu)化的,通常也會(huì)帶來(lái)1x~2x的性能提升。
優(yōu)化推薦:根據(jù)業(yè)務(wù)關(guān)注點(diǎn)在WAL機(jī)制與寫入吞吐量之間做出選擇
其他注意點(diǎn):對(duì)于使用Increment操作的業(yè)務(wù),WAL可以設(shè)置關(guān)閉,也可以設(shè)置異步寫入,方法同Put類似。相信大多數(shù)Increment操作業(yè)務(wù)對(duì)WAL可能都不是那么敏感~
?
Put是否可以同步批量提交?
優(yōu)化原理:HBase分別提供了單條put以及批量put的API接口,使用批量put接口可以減少客戶端到RegionServer之間的RPC連接數(shù),提高寫入性能。另外需要注意的是,批量put請(qǐng)求要么全部成功返回,要么拋出異常。
優(yōu)化建議:使用批量put進(jìn)行寫入請(qǐng)求
Put是否可以異步批量提交?
優(yōu)化原理:業(yè)務(wù)如果可以接受異常情況下少量數(shù)據(jù)丟失的話,還可以使用異步批量提交的方式提交請(qǐng)求。提交分為兩階段執(zhí)行:用戶提交寫請(qǐng)求之后,數(shù)據(jù)會(huì)寫入客戶端緩存,并返回用戶寫入成功;當(dāng)客戶端緩存達(dá)到閾值(默認(rèn)2M)之后批量提交給RegionServer。需要注意的是,在某些情況下客戶端異常的情況下緩存數(shù)據(jù)有可能丟失。
優(yōu)化建議:在業(yè)務(wù)可以接受的情況下開啟異步批量提交
使用方式:setAutoFlush(false)
結(jié)語(yǔ)
所以hbase是提供對(duì)于技術(shù)的支持,但如果利用不用,hbase不為我們所用。在實(shí)際操作中我們應(yīng)用要注意組件的特性以及利用特性,才能很好的為我們所有。