HBase宕機恢復-SplitWAL

HBase檢測宕機是通過Zookeeper實現(xiàn)的, 正常情況下RegionServer會周期性向Zookeeper發(fā)送心跳,一旦發(fā)生宕機,心跳就會停止,超過一定時間(SessionTimeout,我們集群配置的是30s)Zookeeper就會認為RegionServer宕機離線,并將該消息通知給Master。

Master檢測到宕機之后會將宕機RegionServer上的所有Region重新分配到集群中其他正常RegionServer上去,再根據(jù)HLog進行丟失數(shù)據(jù)恢復,恢復完成之后就可以對外提供服務,整個過程都是自動完成的。



HBase切分HLog當前主要有兩種模式Distributed Log Splitting和Distributed Log Replay。
由于我們的集群沒有配置hbase.master.distributed.log.replay=true,所以這里主要研究Distributed Log Splitting流程。

Distributed Log Splitting
整體流程:


Master作為HLog切分任務的協(xié)調(diào)者,主要工作流程如下:

  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作為實際工作的執(zhí)行者,搶占任務以及搶占任務之后的工作流程:

  1. 假設Master當前發(fā)布了3個任務,即當前需要回放3個日志文件,分別為hlog1、hlog2和hlog3

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

  3. 以RegionServer1為例,其搶占到hlog1和hlog2日志之后會分別分發(fā)給兩個HLogSplitter線程進行處理,HLogSplitter負責對日志文件執(zhí)行具體的切分,切分思路還是首先讀出日志中每一個<HLogKey, WALEdit>數(shù)據(jù)對,根據(jù)HLogKey所屬Region寫入不同的Region Buffer,寫入Region Buffer之前會對Entrys進行過濾,通過比較sequenceId,如果發(fā)現(xiàn)該Entry已經(jīng)flush了,就跳過這個Entry。

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

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

源碼:

  • 檢測宕機 發(fā)布任務:


  • RS搶占、處理任務


  • Region replay、上線


整個切分過程中可能出現(xiàn)的問題、解決方法:(持續(xù)更新)

1.RS節(jié)點假死后,DataNode進程處于存在但不可服務的狀態(tài),會導致hbase split wal超時到幾乎無法進行,10分鐘后DataNode徹底下線才能恢復性能

處理:聯(lián)系SA關機、重啟機器,可以加速集群恢復

  1. RS 切分任務失敗時,Master會重新發(fā)布任務,如果某個切分任務卡死,無法順利完成時,可以手動刪除zookeeper上/hbase/splitWAL 下的任務節(jié)點,master會重新發(fā)布 (待驗證)

參考:http://hbasefly.com/2016/10/29/hbase-regionserver-recovering/

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 參考:http://www.lxweimin.com/p/569106a3008f 最近在逐步跟進Hbase的相關...
    博弈史密斯閱讀 872評論 1 1
  • 目錄 HBase的故障恢復有哪三種不同模式? HBase日志切分方法? Distributed Log Repla...
    尼小摩閱讀 926評論 0 1
  • Hbase 每一次對數(shù)據(jù)的修改都會寫入到memorystore 中,寫入成功后,Hbase 便會將這條記錄寫入到...
    Ivan_030c閱讀 5,374評論 1 0
  • HBase深入分析之RegionServer 所有的用戶數(shù)據(jù)以及元數(shù)據(jù)的請求,在經(jīng)過Region的定位,最終會落在...
    絲絲雨涼閱讀 9,260評論 0 3
  • 【什么是大數(shù)據(jù)、大數(shù)據(jù)技術】 大數(shù)據(jù),又稱巨量資料,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無法在合理時間內(nèi)通過傳統(tǒng)的應...
    kimibob閱讀 2,769評論 0 51