日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hbase 按时刻查询_HBase读写优化

發(fā)布時間:2024/9/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hbase 按时刻查询_HBase读写优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


一個系統(tǒng)上線之后,開發(fā)和調(diào)優(yōu)將一直貫穿系統(tǒng)的生命周期中,HBase也不列外。這里學(xué)習(xí)下HBase的調(diào)優(yōu)。Hbase查詢優(yōu)化
作為NoSQL數(shù)據(jù)庫,增刪改查是其最基本的功能,其中查詢是最常用的一項。設(shè)置Scan緩存
HBase中Scan查詢可以設(shè)置緩存,方法是setCaching(),這樣可以有效的減少服務(wù)端與客戶端的交互,更有效的提升掃描查詢的性能。
public void setCaching(int caching) {
this.caching = caching;
}顯示的指定列
當(dāng)使用Scan或者GET獲取大量的行時,最好指定所需要的列,因為服務(wù)端通過網(wǎng)絡(luò)傳輸?shù)娇蛻舳?#xff0c;數(shù)據(jù)量太大可能是瓶頸。如果能有效過濾部分?jǐn)?shù)據(jù),能很大程度的減少網(wǎng)絡(luò)I/O的花費。
public Scan addFamily(byte [] family) {
familyMap.remove(family);
familyMap.put(family, null);
return this;
}
public Scan addColumn(byte [] family, byte [] qualifier) {
NavigableSet<byte []> set = familyMap.get(family);
if(set == null) {
set = new TreeSet<byte []>(Bytes.BYTES_COMPARATOR);
}
if (qualifier == null) {
qualifier = HConstants.EMPTY_BYTE_ARRAY;
}
set.add(qualifier);
familyMap.put(family, set);
return this;
}一般用:
scan.addColumn(...)關(guān)閉ResultScanner
如果在使用table.getScanner之后,忘記關(guān)閉該類,它會一直和服務(wù)端保持連接,資源無法釋放,從而導(dǎo)致服務(wù)端的某些資源不可用。所以在用完之后,需要執(zhí)行關(guān)閉操作,這點與JDBS操作MySQL類似
scanner.close()禁用塊緩存
如果批量進(jìn)行全表掃描,默認(rèn)是有緩存的,如果此時有緩存,會降低掃描的效率。
scan.setCacheBlocks(true|false);對于經(jīng)常讀到的數(shù)據(jù),建議使用默認(rèn)值,開啟塊緩存。緩存查詢結(jié)果
對于頻繁查詢HBase的應(yīng)用場景,可以考慮在應(yīng)用程序和Hbase之間做一層緩存系統(tǒng),新的查詢先去緩存查,緩存沒有再去查Hbase。寫入優(yōu)化
寫也是Hbase常有的操作之一,并且Hbase在寫入操作上有著其他NoSQL無法比擬的優(yōu)勢,下面講如何優(yōu)化寫入操作關(guān)閉寫WAL日志
一般為了保證系統(tǒng)的高可用性,WAL日志默認(rèn)是開啟狀態(tài),WAL主要用于災(zāi)難恢復(fù)的,如果應(yīng)用可以容忍一定的數(shù)據(jù)丟失風(fēng)險,可以在寫數(shù)據(jù)的時候,關(guān)閉寫WAL。風(fēng)險: 當(dāng)RegionServer宕機(jī)時,寫入的數(shù)據(jù)出現(xiàn)丟失,且無法恢復(fù)。

設(shè)置AutoFlush
Htable有一個屬性是AutoFlush,該屬性用于支持客戶端的批量更新,默認(rèn)是true,當(dāng)客戶端每收到一條數(shù)據(jù),立刻發(fā)送到服務(wù)端,如果設(shè)置為false,當(dāng)客戶端提交put請求時候,先將該請求在客戶端緩存,到達(dá)閾值的時候或者執(zhí)行hbase.flushcommits(),才向RegionServer提交請求。風(fēng)險 在請求未發(fā)送到RegionServer之前客戶端崩潰,數(shù)據(jù)也會丟失
table.setAutoFlush(false);
table.setWriteBufferSize( 12 * 1024 * 1024 );預(yù)創(chuàng)建Region
一般表剛開始只有一個Region,插入該表的數(shù)據(jù)都會保存在此Region中,插入該表的所有塑化劑都會保存在該Region中,當(dāng)?shù)竭_(dá)一定的閾值時,才發(fā)生分裂。 這樣開始時刻針對該表的寫操作都集中在某臺服務(wù)器上,造成這臺服務(wù)器的壓力很緊張,同時對整個集群資源的浪費。
建議剛開始的時候預(yù)創(chuàng)建Region,可以使用Hbase自帶的RegionSplitter延遲日志flush
默認(rèn)寫入操作,首先寫入WAL,并且在1S內(nèi)寫入HDFS,這個時間默認(rèn)是1S,可以通過參數(shù)配置
hbase.regionserver.optionallogflushinterval可以配置大一點的值,比如5s,這段時間數(shù)據(jù)會保留在內(nèi)存中,直到RegionServer周期性的執(zhí)行flush操作。
希望能幫助大家。

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的hbase 按时刻查询_HBase读写优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。