hbase hlog

? ?Hbase 每一次對數(shù)據(jù)的修改都會寫入到memorystore 中勇吊,寫入成功后,Hbase 便會將這條記錄寫入到hlog中去萧福。當memorystore滿足一定的條件后辈赋,hregionserver 便會將memorystore flush到磁盤中,記錄著這些memorystore的hlog便會被刪除掉钥屈。當hbase regionserver正常運行時,hlog并不起到任何作用篷就,但是當regionserver出現(xiàn)故障宕機時,未刷寫到磁盤中的memorystore數(shù)據(jù)便會丟失智润,此時便可以通過hlog對丟失的數(shù)據(jù)進行數(shù)據(jù)恢復未辆。hlog恢復數(shù)據(jù)的過程被稱為log split窟绷。本文闡述了hlog的基本結構咐柜、生成過程以及l(fā)og split 的方式攘残。

一为狸、hlog的基本結構

hlog是regionserver級別的,hlog由regionserver中的region共享辐棒,其分布如下圖所示:


hlog 由一個個entry<HLogKey,WALEdit>構成,HLogKey由sequenId知态、wirte time 立叛、cluster ids负敏、region name秘蛇、table name 構成

二、hlog 生成過程


hlog 滾動:regionserver啟動一個線程定期(由參數(shù)’hbase.regionserver.logroll.period’決定妖泄,默認1小時)對hlog進行滾動艘策,重新創(chuàng)建一個新的hlog.,這樣,regionserver上就會產(chǎn)生很多小的hlog 文件朋蔫,hbase這樣做的原因是當hbase的數(shù)據(jù)越來越多時,hlog的大小就會越來越大驯妄。當memorystore 刷寫到磁盤時,過期的hlog 并沒有作用便可刪除源织,一個個小的hlog文件便于刪除。

hlog失效:當memorystore flush 到磁盤后谈息,將hlog中最大的seqId與memorystore中最大的seqId進行比較凛剥,如果小于memorystore中的seqId,則改hlog失效黎茎,便將該hlog移到由wals文件夾移到oldwals文件中去

hlog刪除:當hlog失效后当悔,不立即刪除是因為region replica可能正在對hlog進行讀寫踢代,所以regionserver啟動一個線程每隔一段時間(由參數(shù)’hbase.master.cleaner.interval’嗅骄,默認1分鐘)對檢查該hlog是否可以被刪除,在oldwals文件夾中的hlog文件都有過期時間溺森,默認(由參數(shù)’hbase.master.logcleaner.ttl’決定)為10分鐘

三、log split過程

HBase的故障恢復我們都以RegionServer宕機恢復為例医窿,引起RegionServer宕機的原因各種各樣,有因為Full GC導致姥卢、網(wǎng)絡異常導致渣聚、官方Bug導致(close wait端口未關閉)以及DataNode異常導致等等。

這些場景下一旦RegionServer發(fā)生宕機奕枝,HBase都會馬上檢測到這種宕機,并且在檢測到宕機之后會將宕機RegionServer上的所有Region重新分配到集群中其他正常RegionServer上去隘道,再根據(jù)HLog進行丟失數(shù)據(jù)恢復,恢復完成之后就可以對外提供服務当船,整個過程都是自動完成的,并不需要人工介入〔韵ⅲ基本原理如下圖所示:


log split有三種方式,分別是 log split 表谊、distributed log split 盖喷、distributed log repay

1.log split


log split過程是由Hmaster控制完成的,流程如下

1.將hdfs 上對應regionserver的hlog目錄重命名(regionserver hlog文件一般存放在/hbase/wals/regionserver/目錄中)為/hbase/wals/regionserver-spliting,為了防止hmaster在進行l(wèi)og split時客戶端還對regionserver進行讀寫請求

2.Hmaster 讀取hlog文件课梳,并按region進行分組余佃,對每個region生成一個buffer跨算,并將hlog文件數(shù)據(jù)讀取到各個region中去。

3. 每個buffer會對應啟動一個寫線程诸蚕,負責將buffer中的數(shù)據(jù)寫入hdfs中(對應的路徑為/hbase/table_name/region/recoverd.edits/.tmp),再等Region重新分配到其他RegionServer之后按順序回放對應Region的日志數(shù)據(jù)坏瘩。

這種日志切分可以完成最基本的任務,但是效率極差倔矾,在某些場景下(集群整體宕機)進行恢復可能需要N個小時蛉幸!也因為恢復效率太差破讨,所以開發(fā)了Distributed Log Splitting架構奕纫。

2.distributed log split

distributed log split 是 log split的分布式實現(xiàn),由hmater和regionserver共同完成匹层,hmaster作為協(xié)調者,regionserver為log split的實際工作者撑柔,如圖所示:


Distributed Log Splitting

Distributed Log Splitting是Log Splitting的分布式實現(xiàn)您访,它借助Master和所有RegionServer的計算能力進行日志切分,其中Master作為協(xié)調者灵汪,RegionServer作為實際的工作者∠硌裕基本工作原理如下圖所示:

1. Master會將待切分日志路徑發(fā)布到Zookeeper節(jié)點上(/hbase/splitWAL)览露,每個日志作為一個任務荧琼,每個任務都會有對應狀態(tài),起始狀態(tài)為TASK_UNASSIGNED

2. 所有RegionServer啟動之后都注冊在這個節(jié)點上等待新任務堰乔,一旦Master發(fā)布任務之后,RegionServer就會搶占該任務

3. 搶占任務實際上首先去查看任務狀態(tài)浩考,如果是TASK_UNASSIGNED狀態(tài)被盈,說明當前沒有人占有析孽,此時就去修改該節(jié)點狀態(tài)為TASK_OWNED只怎。如果修改失敗,說明其他RegionServer也在搶占邓尤,修改成功表明任務搶占成功。

4. RegionServer搶占任務成功之后會分發(fā)給相應線程處理汞扎,如果處理成功擅这,會將該任務對應zk節(jié)點狀態(tài)修改為TASK_DONE澈魄,一旦失敗會修改為TASK_ERR

5. Master會一直監(jiān)聽在該ZK節(jié)點上仲翎,一旦發(fā)生狀態(tài)修改就會得到通知。任務狀態(tài)變更為TASK_ERR的話溯香,Master會重新發(fā)布該任務,而變更為TASK_DONE的話结笨,Master會將對應的節(jié)點刪除

下圖是RegionServer搶占任務以及搶占任務之后的工作流程:

1. 假設Master當前發(fā)布了4個任務湿镀,即當前需要回放4個日志文件,分別為hlog1肠骆、hlog2塞耕、hlog3和hlog4

2. RegionServer1搶占到了hlog1和hlog2日志,RegionServer2搶占到了hlog3日志,RegionServer3搶占到了hlog4日志

3. 以RegionServer1為例廓脆,其搶占到hlog1和hlog2日志之后會分別分發(fā)給兩個HLogSplitter線程進行處理,HLogSplitter負責對日志文件執(zhí)行具體的切分停忿,切分思路還是首先讀出日志中每一個數(shù)據(jù)對蚊伞,根據(jù)HLogKey所屬Region寫入不同的Region Buffer

4. 每個Region Buffer都會有一個對應的寫線程席赂,將buffer中的日志數(shù)據(jù)寫入hdfs中时迫,寫入路徑為/hbase/table/region2/seqenceid.temp,其中seqenceid是一個日志中某個region對應的最大sequenceid

5. 針對某一region回放日志只需要將該region對應的所有文件按照sequenceid由小到大依次進行回放即可

這種Distributed Log Splitting方式可以很大程度上加快整個故障恢復的進程癞揉,正常故障恢復時間可以降低到分鐘級別。然而喊熟,這種方式會產(chǎn)生很多日志小文件姐刁,產(chǎn)生的文件數(shù)將會是M * N芥牌,其中M是待切分的總hlog數(shù)量龙填,N是一個宕機RegionServer上的Region個數(shù)。假如一個RegionServer上有200個Region岩遗,并且有90個hlog日志,一旦該RegionServer宕機案铺,那這種方式的恢復過程將會創(chuàng)建 90 * 200 = 18000個小文件。這還只是一個RegionServer宕機的情況控汉,如果是整個集群宕機小文件將會更多7滴恰!测僵!

轉載自:https://blog.csdn.net/lw_ghy/article/details/60779289

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谢翎,一起剝皮案震驚了整個濱河市沐旨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磁携,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闷供,死亡現(xiàn)場離奇詭異,居然都是意外死亡这吻,警方通過查閱死者的電腦和手機篙议,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鬼贱,“玉大人,你說我怎么就攤上這事这难。” “怎么了嵌溢?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵蹋岩,是天一觀的道長赖草。 經(jīng)常有香客問我,道長秧骑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任乎折,我火速辦了婚禮侵歇,結果婚禮上,老公的妹妹穿的比我還像新娘惕虑。我一直安慰自己士修,他們只是感情好枕屉,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布膀曾。 她就那樣靜靜地躺著矩桂,像睡著了一般痪伦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上网沾,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音辉哥,去河邊找鬼。 笑死恒水,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钉凌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼御雕,長吁一口氣:“原來是場噩夢啊……” “哼滥搭!你這毒婦竟也來了?” 一聲冷哼從身側響起论熙,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎无午,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宪迟,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡交惯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年穿仪,在試婚紗的時候發(fā)現(xiàn)自己被綠了意荤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡玖像,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捐寥,到底是詐尸還是另有隱情,我是刑警寧澤握恳,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布乡洼,位于F島的核電站崇裁,受9級特大地震影響束昵,放射性物質發(fā)生泄漏。R本人自食惡果不足惜妻怎,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逼侦。 院中可真熱鬧,春花似錦榛丢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽然走。三九已至戏挡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褐墅,已是汗流浹背洪己。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工竟贯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留答捕,地道東北人屑那。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像齐莲,于是被迫代替她去往敵國和親磷箕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 參考:http://www.reibang.com/p/569106a3008f 最近在逐步跟進Hbase的相關...
    博弈史密斯閱讀 849評論 1 1
  • 最近在逐步跟進Hbase的相關工作芒填,由于之前對Hbase并不怎么了解空繁,因此系統(tǒng)地學習了下Hbase殿衰,為了加深對Hb...
    飛鴻無痕閱讀 50,202評論 19 272
  • 目錄 HBase的故障恢復有哪三種不同模式闷祥? HBase日志切分方法? Distributed Log Repla...
    尼小摩閱讀 893評論 0 1
  • 本文首先簡單介紹了HBase,然后重點講述了HBase的高并發(fā)和實時處理數(shù)據(jù) 凯砍、HBase數(shù)據(jù)模型拴竹、HBase物理...
    達微閱讀 2,730評論 1 13
  • HBase深入分析之RegionServer 所有的用戶數(shù)據(jù)以及元數(shù)據(jù)的請求,在經(jīng)過Region的定位栓拜,最終會落在...
    絲絲雨涼閱讀 9,007評論 0 3