HBase Compaction簡述

原創(chuàng)文章,轉(zhuǎn)載請注明原作地址:http://www.reibang.com/p/895ab6511819
在介紹HBase Compaction之前饶辙,我們先來看一下HBase是如何存儲和操作數(shù)據(jù)乾戏。

HBase數(shù)據(jù)存儲

如上圖所示合搅,HRegionServer負(fù)責(zé)打開region,并創(chuàng)建對應(yīng)的HRegion實例歧蕉。當(dāng)HRegion打開之后灾部,它會為每個表的HColumnFamily創(chuàng)建一Store實例,ColumnFamily是用戶在創(chuàng)建表時定義好的惯退,ColumnFamily在每個region中和Store實例一一對應(yīng)赌髓。每個Store實例包含一個或者多個StoreFile實例,StoreFile是對實際存儲數(shù)據(jù)文件HFile的輕量級封裝催跪。每個Store對應(yīng)一個MemStore(也就是寫內(nèi)存)锁蠕。一個HRegionServer共享一個HLog實例。

當(dāng)我們不停地往HBase中寫入數(shù)據(jù)懊蒸,也就是往MemStore寫入數(shù)據(jù)荣倾,HBase會檢查MemStore是否達(dá)到了需要刷寫到磁盤的閾值(更多關(guān)于MemStore刷寫的信息,可以參考HBase Reference Guide關(guān)于MemStore的介紹)骑丸。如果達(dá)到刷寫的條件舌仍,MemStore中的記錄就會被刷寫到磁盤,形成一個新的StoreFile通危≈恚可想而知,隨著MemStore的不斷刷寫菊碟,會形成越來越多的磁盤文件节芥。然而,對于HBase來說逆害,當(dāng)每個HStore僅包含一個文件時头镊,才會達(dá)到最佳的讀效率。因此HBase會通過合并已有的HFile來減少每次讀數(shù)據(jù)的磁盤尋道時間魄幕,從而提高讀速度相艇,這個文件合并過程就稱為Compaction。在這里需要說明的是梅垄,顯然磁盤IO也是有代價的厂捞,如果使用不慎的話输玷,不停地重寫數(shù)據(jù)可能會導(dǎo)致網(wǎng)絡(luò)和磁盤過載。換句話說靡馁,compaction其實就是用當(dāng)前更高的磁盤IO來換取將來更低的磁盤尋道時間欲鹏。因此,何時執(zhí)行compaction臭墨,其實是一個相當(dāng)復(fù)雜的決策赔嚎。

HBase的compaction分為minor和major兩種。minor合并負(fù)責(zé)將幾個小文件合并成一個較大的文件胧弛;major合并是將一個HStore中的所有文件合并成一個文件尤误。每次觸發(fā)compact檢查。系統(tǒng)會自動決定執(zhí)行哪一種compaction(合并)结缚。有三種情況會觸發(fā)compact檢查:

  1. MemStore被刷寫到磁盤损晤;
  2. 用戶執(zhí)行shell命令compact、major_compact或者調(diào)用了相應(yīng)的API红竭;
  3. HBase后臺線程周期性觸發(fā)檢查尤勋。

除非是用戶使用shell命令major_compact或者調(diào)用了majorCompact() API(這種情況會強制HBase執(zhí)行major合并),在其他的觸發(fā)情況下茵宪,HBase服務(wù)器會首先檢查上次運行到現(xiàn)在是否達(dá)到一個指定的時限最冰。如果沒有達(dá)到這個時限,系統(tǒng)會選擇執(zhí)行minor合并稀火,接著檢查是否滿足minor合并的條件暖哨。

major合并中會刪除那些被標(biāo)記為刪除的數(shù)據(jù)、超過TTL(time-to-live)時限的數(shù)據(jù)凰狞,以及超過了版本數(shù)量限制的數(shù)據(jù)篇裁,將HStore中所有的HFile重寫成一個HFile。如此多的工作量服球,理所當(dāng)然地茴恰,major合并會耗費更多的資源,合并進(jìn)行時也會影響HBase的響應(yīng)時間斩熊。在HBase 0.96之前,默認(rèn)每天對region做一次major compact伐庭,現(xiàn)在這個周期被改成了7天粉渠。然而,因為major compact可能導(dǎo)致某臺server短時間內(nèi)無法響應(yīng)客戶端的請求圾另,如果無法容忍這種情況的話霸株,可以關(guān)閉自動major compact,改成在請求低谷期手動觸發(fā)這一操作集乔。

minor合并的關(guān)鍵是去件,要如何挑選那些被合并的小文件?0.96版本之前,HBase的合并策略只有一個RatioBasedCompactionPolicy尤溜。這個策略中有三個重要參數(shù):首先是hbase.hstore. compaction.min. sizehbase.hstore. compaction.max. size倔叼,在minor合并中,所有大小超過max. size的文件都會被排除在外宫莱,而min. size其實是一個閾值丈攒,minor合并會盡可能多地包括那些文件大小低于min. size的文件;在一次minor合并中授霸,合并的文件數(shù)量最多不能超過hbase.hstore. compaction.max巡验。另外,這個策略選擇需要合并的文件時碘耳,總是優(yōu)先選擇較老的文件显设,也就意味著,沿著時間軸從最老的文件開始掃描辛辨,HBase會選擇合并它掃描到的第一個滿足合并策略的文件集合敷硅。
然而,實際操作中發(fā)現(xiàn)RatioBasedCompactionPolicy的表現(xiàn)并不好愉阎,因為這個策略假設(shè)越老的文件大小越大绞蹦,而實際情況并不是這樣,比如bulkLoad導(dǎo)入的新文件大小就很可能大于舊文件榜旦。于是幽七,之后HBase加入了一個新策略ExploringCompactionPolicy。在這個策略中溅呢,HBase不是選擇第一個符合合并策略的文件集合澡屡,而是考慮了所有符合要求的文件集合,并從中選擇文件數(shù)量最多的集合(當(dāng)有多個這樣的文件集合時咐旧,選擇總文件大小最小的那個集合)驶鹉。這樣導(dǎo)致的影響是,HBase總是選擇合并會為IO帶來最佳改善的文件集合铣墨。

隨著compaction的進(jìn)行室埋,當(dāng)所有文件中最大的那個超過了配置的最大存儲文件大小,又會觸發(fā)region拆分(如果region拆分沒有被禁止的話)伊约。

參考鏈接:
http://blog.cloudera.com/blog/2013/12/what-are-hbase-compactions/
https://hbase.apache.org/book.html#compaction
《HBase權(quán)威指南》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姚淆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屡律,更是在濱河造成了極大的恐慌腌逢,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件超埋,死亡現(xiàn)場離奇詭異搏讶,居然都是意外死亡佳鳖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門媒惕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來系吩,“玉大人,你說我怎么就攤上這事吓笙∈缑担” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵面睛,是天一觀的道長絮蒿。 經(jīng)常有香客問我,道長叁鉴,這世上最難降的妖魔是什么土涝? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮幌墓,結(jié)果婚禮上但壮,老公的妹妹穿的比我還像新娘。我一直安慰自己常侣,他們只是感情好蜡饵,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胳施,像睡著了一般溯祸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舞肆,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天焦辅,我揣著相機與錄音,去河邊找鬼椿胯。 笑死筷登,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哩盲。 我是一名探鬼主播前方,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼种冬!你這毒婦竟也來了镣丑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤娱两,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后金吗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體十兢,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡趣竣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旱物。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遥缕。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宵呛,靈堂內(nèi)的尸體忽然破棺而出单匣,到底是詐尸還是另有隱情,我是刑警寧澤宝穗,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布户秤,位于F島的核電站,受9級特大地震影響逮矛,放射性物質(zhì)發(fā)生泄漏鸡号。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一须鼎、第九天 我趴在偏房一處隱蔽的房頂上張望鲸伴。 院中可真熱鬧,春花似錦晋控、人聲如沸汞窗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仲吏。三九已至,卻和暖如春捶朵,著一層夾襖步出監(jiān)牢的瞬間蜘矢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工综看, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留品腹,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓红碑,卻偏偏與公主長得像舞吭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子析珊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容