W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
RegionServer服務(wù)于許多區(qū)域。區(qū)域服務(wù)器中的所有區(qū)域共享相同活動的WAL文件。WAL文件中的每個編輯都包含有關(guān)它屬于哪個區(qū)域的信息。當(dāng)打開區(qū)域時,需要重播屬于該區(qū)域的WAL文件中的編輯。因此,WAL文件中的編輯必須按區(qū)域分組,以便可以重播特定的集合以重新生成特定區(qū)域中的數(shù)據(jù)。按區(qū)域?qū)AL編輯進(jìn)行分組的過程稱為日志拆分。如果區(qū)域服務(wù)器出現(xiàn)故障,它是恢復(fù)數(shù)據(jù)的關(guān)鍵過程。
在群集啟動時由HMaster完成日志拆分,或者在區(qū)域服務(wù)器關(guān)閉時由ServerShutdownHandler完成日志拆分。為保證一致性,受影響的區(qū)域在數(shù)據(jù)恢復(fù)之前不可用。所有WAL編輯都需要在給定區(qū)域再次可用之前恢復(fù)并重播。因此,受到日志拆分影響的區(qū)域在該過程完成之前不可用。
過程:日志分割,分步執(zhí)行
新目錄按以下模式命名:
/hbase/WALs/<host>,<port>,<startcode>-splitting
這種重命名的目錄的例子可能如下所示:
/hbase/WALs/srv.example.com,60020,1254173957298-splitting
/hbase/<table_name>/<region_id>/recovered.edits/.temp
該文件用于存儲此區(qū)域的WAL日志中的所有編輯。日志拆分完成后,.temp文件將被重命名為寫入文件的第一個日志的序列ID。要確定是否所有編輯都已寫入,將序列ID與寫入HFile的上次編輯的序列進(jìn)行比較。如果最后編輯的序列大于或等于文件名中包含的序列ID,則很明顯,編輯文件中的所有寫入操作都已完成。如果您將該hbase.hlog.split.skip.errors選項設(shè)置為true,則錯誤處理如下:
如果該hbase.hlog.split.skip.errors選項設(shè)置為false默認(rèn)值,則將傳播該異常,并將該拆分記錄為失敗。
如果在拆分日志時發(fā)生EOFException,即使hbase.hlog.split.skip.errors設(shè)置為false,拆分也會繼續(xù)。在讀取要拆分的文件集合中的最后一個日志時,可能會出現(xiàn)EOFException,因為RegionServer可能在崩潰時寫入記錄的過程中。
WAL日志拆分和恢復(fù)可能需要大量資源并需要很長時間,具體取決于崩潰中涉及的RegionServer的數(shù)量和區(qū)域的大小。啟用或禁用分布式日志分割是為了提高日志分割期間的性能。
啟用或禁用分布式日志拆分
分布式日志處理自HBase 0.92開始默認(rèn)啟用。該設(shè)置由hbase.master.distributed.log.splitting屬性控制,可以設(shè)置為true或false,但默認(rèn)為true。
分布式日志拆分,分步執(zhí)行
配置分布式日志拆分后,HMaster控制進(jìn)程。HMaster在日志拆分過程中注冊每個RegionServer,實際拆分日志的工作由RegionServers完成。分布式日志拆分中逐步描述的日志拆分的一般過程在這里仍然適用。
ls /hbase/splitWAL
[hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost8.sample.com%2C57020%2C1340474893275-splitting%2Fhost8.sample.com%253A57020.1340474893900,
hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost3.sample.com%2C57020%2C1340474893299-splitting%2Fhost3.sample.com%253A57020.1340474893931,
hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost4.sample.com%2C57020%2C1340474893287-splitting%2Fhost4.sample.com%253A57020.1340474893946]
輸出包含一些非ASCII字符。解碼后,它看起來更簡單:[hdfs://host2.sample.com:56020/hbase/WALs
/host8.sample.com,57020,1340474893275-splitting
/host8.sample.com%3A57020.1340474893900,
hdfs://host2.sample.com:56020/hbase/WALs
/host3.sample.com,57020,1340474893299-splitting
/host3.sample.com%3A57020.1340474893931,
hdfs://host2.sample.com:56020/hbase/WALs
/host4.sample.com,57020,1340474893287-splitting
/host4.sample.com%3A57020.1340474893946]
該列表表示要掃描和拆分的WAL文件名,這是日志拆分任務(wù)的列表。get /hbase/splitWAL/hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost6.sample.com%2C57020%2C1340474893287-splitting%2Fhost6.sample.com%253A57020.1340474893945
unassigned host2.sample.com:57000
cZxid = 0×7115
ctime = Sat Jun 23 11:13:40 PDT 2012
...
根據(jù)數(shù)據(jù)更改的任務(wù)的狀態(tài),拆分日志管理器將執(zhí)行以下操作之一:任務(wù)失敗的原因:該任務(wù)已被刪除;該節(jié)點不再存在;日志狀態(tài)管理器無法將任務(wù)的狀態(tài)移至TASK_UNASSIGNED;重新提交的次數(shù)超過了重新提交閾值。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: