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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hbase Memstore刷新方式与Region的数目上限

發(fā)布時(shí)間:2024/8/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hbase Memstore刷新方式与Region的数目上限 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

Region數(shù)目上限

Region大小上限

MemStore的刷新方式(觸發(fā)條件)

HLog (WAL) Size & Memstore Flush

頻繁的Memstore Flushes


Region數(shù)目上限

RegionServer的region數(shù)目取決于memstore的內(nèi)存使用,每個(gè)region擁有一組memstore(memstore的數(shù)量有hstore決定,hstore的數(shù)據(jù)由創(chuàng)建表時(shí)的指定的列族個(gè)數(shù)決定,所以 每個(gè)region的memstore的個(gè)數(shù) = 表的列族的個(gè)數(shù) ),可以通過配置來修改memstore占用內(nèi)存的大小,一般設(shè)置在 128 M – 256M之間。

RegionServer 分配一定比例的內(nèi)存給它下面的所有memstore(?該比例大小 可通過hbase.regionserver.global.memstore.upperLimit 進(jìn)行修改 ), 如果內(nèi)存溢出(使用了太多的memstore),它可能會導(dǎo)致嚴(yán)重的后果,如服務(wù)器反應(yīng)遲鈍 或compact風(fēng)暴。比較好的計(jì)算每RS(假設(shè)一個(gè)表)region的數(shù)量的公式為:

((RS memory) * (total memstore fraction)) / ((memstore size)*(# column families))

(RegionServer內(nèi)存? *??分配給MemStore比例)?/ (Memstore 大小 * 列簇?cái)?shù)量)

?

參數(shù)說明
分配給MemStore比例hbase.regionserver.global.memstore.upperLimit單個(gè)Region內(nèi)所有的memstore大小總和,超過則flush到磁盤
Memstore 大小hbase.hregion.memstore.flush.size如 memstore 大小超過此值(字節(jié)數(shù)),Memstore 將刷新到磁盤。通過運(yùn)行由 hbase.server.thread.wakefrequency 指定的頻率的線程檢查此值。
?hbase.regionserver.global.memstore.lowerLimit如下
?hbase.hregion.memstore.block.multiplier超過memstore大小的倍數(shù)達(dá)到該值則block所有寫入請求,自我保護(hù)

參數(shù)說明:

hbase.regionserver.global.memstore.upperLimit/lowerLimit
默認(rèn)值:0.4/0.35


upperlimit說明:hbase.hregion.memstore.flush.size 這個(gè)參數(shù)的作用是當(dāng)單個(gè)Region內(nèi)所有的memstore大小總和超過指定值時(shí),flush該region的所有memstore。RegionServer的flush是通過將請求添加一個(gè)隊(duì)列,模擬生產(chǎn)消費(fèi)模式來異步處理的。那這里就有一個(gè)問題,當(dāng)隊(duì)列來不及消費(fèi),產(chǎn)生大量積壓請求時(shí),可能會導(dǎo)致內(nèi)存陡增,最壞的情況是觸發(fā)OOM。
這個(gè)參數(shù)的作用是防止內(nèi)存占用過大,當(dāng)ReigonServer內(nèi)所有region的memstores所占用內(nèi)存總和達(dá)到heap的40%時(shí),HBase會強(qiáng)制block所有的更新并flush這些region以釋放所有memstore占用的內(nèi)存。


lowerLimit說明: 同upperLimit,只不過lowerLimit在所有region的memstores所占用內(nèi)存達(dá)到Heap的35%時(shí),不flush所有的memstore。它會找一個(gè)memstore內(nèi)存占用最大的region,做個(gè)別flush,此時(shí)寫更新還是會被block。lowerLimit算是一個(gè)在所有region強(qiáng)制flush導(dǎo)致性能降低前的補(bǔ)救措施。在日志中,表現(xiàn)為 “** Flush thread woke up with memory above low water.”
調(diào)優(yōu):這是一個(gè)Heap內(nèi)存保護(hù)參數(shù),默認(rèn)值已經(jīng)能適用大多數(shù)場景。
參數(shù)調(diào)整會影響讀寫,如果寫的壓力大導(dǎo)致經(jīng)常超過這個(gè)閥值,則調(diào)小讀緩存hfile.block.cache.size增大該閥值,或者Heap余量較多時(shí),不修改讀緩存大小。
如果在高壓情況下,也沒超過這個(gè)閥值,那么建議你適當(dāng)調(diào)小這個(gè)閥值再做壓測,確保觸發(fā)次數(shù)不要太多,然后還有較多Heap余量的時(shí)候,調(diào)大hfile.block.cache.size提高讀性能。
還有一種可能性是?hbase.hregion.memstore.flush.size保持不變,但RS維護(hù)了過多的region,要知道 region數(shù)量直接影響占用內(nèi)存的大小。

hfile.block.cache.size

默認(rèn)值:0.2
說明:storefile的讀緩存占用Heap的大小百分比,0.2表示20%。該值直接影響數(shù)據(jù)讀的性能。
調(diào)優(yōu):當(dāng)然是越大越好,如果寫比讀少很多,開到0.4-0.5也沒問題。如果讀寫較均衡,0.3左右。如果寫比讀多,果斷默認(rèn)吧。設(shè)置這個(gè)值的時(shí)候,你同時(shí)要參考?hbase.regionserver.global.memstore.upperLimit?,該值是memstore占heap的最大百分比,兩個(gè)參數(shù)一個(gè)影響讀,一個(gè)影響寫。如果兩值加起來超過80-90%,會有OOM的風(fēng)險(xiǎn),謹(jǐn)慎設(shè)置。

?

hbase.hregion.memstore.block.multiplier

指單個(gè)MemStore超過?hbase.hregion.memstore.block.multiplier 的倍數(shù),就阻止寫入操作。

當(dāng)一個(gè)集群批量導(dǎo)入數(shù)據(jù)時(shí),寫入速度過快導(dǎo)致異常可調(diào)整 hbase.hregion.memstore.block.multiplier 參數(shù)。

? ? e.g. 異常處理:https://blog.csdn.net/zhangshenghang/article/details/82621101

Memstore手動(dòng)flush

hbase(main):001:0> help 'flush' Flush all regions in passed table or pass a region row to flush an individual region. For example:hbase> flush 'TABLENAME'hbase> flush 'REGIONNAME'hbase> flush 'ENCODED_REGIONNAME'hbase(main):004:0> flush 'user' 0 row(s) in 0.2640 seconds

?

?

例如: 如果 一個(gè)RegionServer配置的內(nèi)存是16g,使用默認(rèn)配置(?hbase默認(rèn)regionserver分給memstore的比例是0.4?, 默認(rèn)的menstore的占用128M內(nèi)存 ), 一個(gè)CF,那么這個(gè)regionServer下的region的個(gè)數(shù)大約為?16384 * 0.4 /?(128*1)?= 51個(gè),實(shí)際測試大于這個(gè)數(shù) 一兩倍 也沒太大的問題。 一個(gè)HBase表包含一至多個(gè)region,那么表的數(shù)目上限也是可以估算出來的。

?

Region大小上限

   對于生產(chǎn)場景中大表,最大的region大小主要是受compactions 的限制,大量大HFile的compact會降低群集性能。目前,該建議的最大region大小為10-20GB,而5-10GB是最優(yōu)

?

?

MemStore的刷新方式(觸發(fā)條件)

1、hbase.hregion.memstore.flush.size

默認(rèn)值 128M,單個(gè) MemStore 大小超過該閾值就會觸發(fā) Flush。如果當(dāng)前集群 Flush 比較頻繁,并且內(nèi)存資源比較充裕,建議適當(dāng)調(diào)整為 256M。調(diào)大的副作用可能是造成宕機(jī)時(shí)需要分裂的 HLog 數(shù)量變多,從而延長故障恢復(fù)時(shí)間。

2、hbase.hregion.memstore.block.multiplier

默認(rèn)值 4,Region 中所有 MemStore 超過單個(gè) MemStore 大小的倍數(shù)達(dá)到該參數(shù)值時(shí),就會阻塞寫請求并強(qiáng)制 Flush。一般不建議調(diào)整,但對于寫入過快且內(nèi)存充裕的場景,為避免寫阻塞,可以適當(dāng)調(diào)整到5~8。

3、hbase.regionserver.global.memstore.size

默認(rèn)值 0.4,RegionServer 中所有 MemStore 大小總和最多占 RegionServer 堆內(nèi)存的 40%。這是寫緩存的總比例,可以根據(jù)實(shí)際場景適當(dāng)調(diào)整,且要與 HBase 讀緩存參數(shù) hfile.block.cache.size(默認(rèn)也是0.4)配合調(diào)整。舊版本參數(shù)名稱為 hbase.regionserver.global.memstore.upperLimit。

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

默認(rèn)值 0.95,表示 RegionServer 中所有 MemStore 大小的低水位是 hbase.regionserver.global.memstore.size 的 95%,超過該比例就會強(qiáng)制 Flush。一般不建議調(diào)整。舊版本參數(shù)名稱為 hbase.regionserver.global.memstore.lowerLimit。

5、hbase.regionserver.optionalcacheflushinterval

默認(rèn)值 3600000(即 1 小時(shí)),HBase 定期 Flush 所有 MemStore 的時(shí)間間隔。一般建議調(diào)大,比如 10 小時(shí),因?yàn)楹芏鄨鼍跋?1 小時(shí) Flush 一次會產(chǎn)生很多小文件,一方面導(dǎo)致 Flush 比較頻繁,另一方面導(dǎo)致小文件很多,影響隨機(jī)讀性能,因此建議設(shè)置較大值。

  • Memstore級別限制:當(dāng)Region中任意一個(gè)MemStore的大小達(dá)到了上限(hbase.hregion.memstore.flush.size,默認(rèn)128MB),會觸發(fā)Memstore刷新。
  • Region級別限制:當(dāng)Region中所有Memstore的大小總和達(dá)到了上限(hbase.hregion.memstore.block.multiplier?*?hbase.hregion.memstore.flush.size,默認(rèn)?2*?128M?=?256M),會觸發(fā)memstore刷新。
  • Region?Server級別限制:當(dāng)一個(gè)Region?Server中所有Memstore的大小總和達(dá)到了上限(hbase.regionserver.global.memstore.upperLimit?*?hbase_heapsize,默認(rèn)?40%的JVM內(nèi)存使用量),會觸發(fā)部分Memstore刷新。Flush順序是按照Memstore由大到小執(zhí)行,先Flush Memstore最大的Region,再執(zhí)行次大的,直至總體Memstore內(nèi)存使用量低于閾值(hbase.regionserver.global.memstore.lowerLimit?*?hbase_heapsize,默認(rèn)?38%的JVM內(nèi)存使用量)。
  • 當(dāng)一個(gè)Region?Server中HLog數(shù)量達(dá)到上限(可通過參數(shù)hbase.regionserver.maxlogs配置)時(shí),系統(tǒng)會選取最早的一個(gè) HLog對應(yīng)的一個(gè)或多個(gè)Region進(jìn)行flush
  • HBase定期刷新Memstore:默認(rèn)周期為1小時(shí),確保Memstore不會長時(shí)間沒有持久化。為避免所有的MemStore在同一時(shí)間都進(jìn)行flush導(dǎo)致的問題,定期的flush操作有20000左右的隨機(jī)延時(shí)。
  • 手動(dòng)執(zhí)行flush:用戶可以通過shell命令?flush ‘tablename’或者flush ‘region?name’分別對一個(gè)表或者一個(gè)Region進(jìn)行flush。

?

HLog (WAL) Size & Memstore Flush

當(dāng)數(shù)據(jù)被寫入時(shí)會默認(rèn)先寫入Write-ahead Log(WAL)。WAL中包含了所有已經(jīng)寫入Memstore但還未Flush到HFile的更改(edits)。在Memstore中數(shù)據(jù)還沒有持久化,當(dāng)RegionSever宕掉的時(shí)候,可以使用WAL恢復(fù)數(shù)據(jù)。

當(dāng)WAL(在HBase中成為HLog)變得很大的時(shí)候,在恢復(fù)的時(shí)候就需要很長的時(shí)間。因此,對WAL的大小也有一些限制,當(dāng)達(dá)到這些限制的時(shí)候,就會觸發(fā)Memstore的flush。Memstore flush會使WAL 減少,因?yàn)閿?shù)據(jù)持久化之后(寫入到HFile),就沒有必要在WAL中再保存這些修改。有兩個(gè)屬性可以配置:

  • hbase.regionserver.hlog.blocksize
  • hbase.regionserver.maxlogs

你可能已經(jīng)發(fā)現(xiàn),WAL的最大值由hbase.regionserver.maxlogs * hbase.regionserver.hlog.blocksize (2GB by default)決定。一旦達(dá)到這個(gè)值,Memstore flush就會被觸發(fā)。所以,當(dāng)你增加Memstore的大小以及調(diào)整其他的Memstore的設(shè)置項(xiàng)時(shí),你也需要去調(diào)整HLog的配置項(xiàng)。否則,WAL的大小限制可能會首先被觸發(fā),因而,你將利用不到其他專門為Memstore而設(shè)計(jì)的優(yōu)化。拋開這些不說,通過WAL限制來觸發(fā)Memstore的flush并非最佳方式,這樣做可能會會一次flush很多Region,盡管“寫數(shù)據(jù)”是很好的分布于整個(gè)集群,進(jìn)而很有可能會引發(fā)flush“大風(fēng)暴”。

提示:最好將hbase.regionserver.hlog.blocksize * hbase.regionserver.maxlogs 設(shè)置為稍微大于hbase.regionserver.global.memstore.lowerLimit * HBASE_HEAPSIZE.

?

頻繁的Memstore Flushes

要避免“寫阻塞”,貌似讓Flush操作盡量的早于達(dá)到觸發(fā)“寫操作”的閾值為宜。但是,這將導(dǎo)致頻繁的Flush操作,而由此帶來的后果便是讀性能下降以及額外的負(fù)載。

每次的Memstore Flush都會為每個(gè)CF創(chuàng)建一個(gè)HFile。頻繁的Flush就會創(chuàng)建大量的HFile。這樣HBase在檢索的時(shí)候,就不得不讀取大量的HFile,讀性能會受很大影響。

為預(yù)防打開過多HFile及避免讀性能惡化,HBase有專門的HFile合并處理(HFile Compaction Process)。HBase會周期性的合并數(shù)個(gè)小HFile為一個(gè)大的HFile。明顯的,有Memstore Flush產(chǎn)生的HFile越多,集群系統(tǒng)就要做更多的合并操作(額外負(fù)載)。更糟糕的是:Compaction處理是跟集群上的其他請求并行進(jìn)行的。當(dāng)HBase不能夠跟上Compaction的時(shí)候(同樣有閾值設(shè)置項(xiàng)),會在RS上出現(xiàn)“寫阻塞”。像上面說到的,這是最最不希望的。

Compaction操作盡量取消自動(dòng)Compaction,使用空閑時(shí)間手動(dòng)執(zhí)行,已減少對服務(wù)的影響

?

參考資料:

http://blog.csdn.net/oozie123

http://hbasefly.com/2016/03/23/hbase-memstore-flush/

《Hbase權(quán)威指南》

https://blog.csdn.net/joeyon1985/article/details/71511891

其他的是之前做的筆記,沒有記錄當(dāng)時(shí)參考文章~~~~

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Hbase Memstore刷新方式与Region的数目上限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产农村老头老太视频 | 91看片就是不一样 | 国产国语videosex另类 | 亚洲日本久久 | av在线免| 不卡的中文字幕 | 国产成人a v | 精品亚洲一区二区三区四区五区 | 亚洲一区二区三区在线播放 | 亚洲欧美在线观看 | 深夜视频在线观看免费 | 国产乱子伦视频一区二区三区 | 国产免费不卡视频 | 久久久电影 | 牛牛电影国产一区二区 | 国产精品亚洲lv粉色 | 久久aⅴ乱码一区二区三区 亚洲成人18 | 97se在线视频 | 一区二区人妻 | 波多野结衣视频免费在线观看 | 玖玖在线观看 | 亚洲国产无码精品 | 在线免费观看黄色片 | 国产精品无码久久久久成人app | 国精品无码一区二区三区 | 麻豆视频在线播放 | 在线观看av中文字幕 | 黑人操日本女人视频 | www.色网站 | 五月婷婷六月丁香综合 | 资源av| 自拍亚洲国产 | 精品人妻无码一区二区三区蜜桃一 | 欧美性粗暴 | 日韩一级片在线播放 | 毛片日韩 | 羞羞软件 | 波多野结衣女同 | wwwxxx在线播放| 我的公把我弄高潮了视频 | 国产精品一二三区 | 天天摸夜夜 | 亚洲免费视频大全 | 国产女人高潮毛片 | 欧美日韩久久久 | 欧美另类xxxxx| 免费亚洲网站 | 快播视频在线观看 | 国产网站免费 | 公车激情云雨小说 | 色爱五月天 | 日本视频中文字幕 | 国产一区二区亚洲 | 欧美成人a交片免费看 | 亚洲综合中文 | 激情全身裸吻胸 | 亚洲激情欧美色图 | 午夜污污 | 人人九九精品 | 久草福利在线 | 亚洲欧美日韩精品在线观看 | www,av在线 | av最新版天堂资源在线 | 国产一区综合 | 91麻豆蜜桃一区二区三区 | 中文字幕在线欧美 | 欧美网站在线观看 | 99热黄色 | 一区二区三区视频在线免费观看 | 99这里 | 欧美挤奶吃奶水xxxxx | 久久天天躁狠狠躁夜夜躁 | 美女被叉叉的影院 | 青草久久网| 春色导航| av一卡二卡 | h片在线观看视频 | 美女被猛网站 | 久操青青 | 一线毛片 | 波多野结衣一二三区 | 黄瓜视频91 | 豆花视频在线播放 | aaa一区二区 | 91视频入口 | 午夜影院免费视频 | 免费在线你懂的 | 无码人妻精品一区二区三区夜夜嗨 | 黑人乱码一区二区三区av | 放荡闺蜜高h苏桃情事h | 国产精品久久久久久久久免费相片 | 两个小y头稚嫩紧窄h文 | 日本一区不卡 | 99精品视频一区二区三区 | 一区二区三区四区免费 | 少妇高潮一区二区三区 | 日本免费一区二区三区四区五六区 | 亚洲av无码国产精品久久 | 大奶子在线 |