HDFSblock丟失過多進入安全模式(safemode)的解決方法

來源:互聯網
上載者:User
關鍵字 安全模式 safemode HDFS用戶端 HDFSblock丟失

HDFS block丟失過多進入安全模式(Safe mode)的解決方法

背景及現象描述(Background and Symptom)

因磁碟空間不足,記憶體不足,系統掉電等其他原因導致dataNode datablock丟失,出現如下類似日誌:

The number of live datanodes 3 has reached the minimum number 0.

Safe mode will be turned off automatically once the thresholds have been reached.

Caused by: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Log not rolled.

Name node is in safe mode.

The reported blocks 632758 needs additional 5114 blocks to reach the threshold 0.9990

of total blocks 638510.

The number of live datanodes 3 has reached the minimum number 0.

Safe mode will be turned off automatically once the thresholds have been reached.

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode

(FSNamesystem.java:1209)

... 12 more

原因分析(Cause Analysis)*

由於系統斷電,記憶體不足等原因導致dataNode丟失超過設置的丟失百分比,系統自動進入安全模式

解決辦法(Solution)*

安裝HDFS用戶端,並執行如下命令:

步驟 1 執行命令退出安全模式:hadoop dfsadmin -safemode leave

步驟 2 執行健康檢查,刪除損壞掉的block。 hdfs fsck / -delete

注意: 這種方式會出現資料丟失,損壞的block會被刪掉

集群機器意外斷電重啟,導致hbase 無法正常啟動,拋出reflect invocation異常,可能是正在執行的插入或合併等操作進行到一半時中斷,導致部分資料檔案不完整格式不正確或在hdfs上block塊不完整。

在網上查了一下相關資料,懷疑有可能是關閉前一些未提交的修改所存放的log檔資料寫入一半檔不完整,故把hbase.hlog.split.skip.errors改成true進行嘗試。

關於這個參數作用的解釋:

當伺服器奔潰,重啟的時候,會有個重播的過程,把/hbase/WAL/下面記錄的log都重播一遍,合併到每個region中,重播過程中如果有error發生,這個參數又是false,那麼exception就會向外層輸出, 重播失敗。

但是很遺憾,將此參數修改後hbase集群仍然無法正常啟動。

然後就琢磨其他原因,先觀察hbase啟動時的60010監控頁面,

發現部分region FAILED_OPEN錯誤,its007-meta表一共200個region,只啟動成功199個。

似乎想到了什麼,對了,很可能是這個region的資料檔案格式不正確,那就先檢查一下其在hdfs上的檔是否正常。

果不其然,觀察hadoop的50070頁面,會提示hadoop檔案系統的具體路徑上有兩個數據塊出錯。

(關於hbase在hdfs上的目錄相關文章連結:HBase在HDFS上的目錄樹)

解決方法:

1.運行hadoop fsck / -files檢查hdfs檔

2.發現/hbase/oldWALs目錄下有一個檔損壞,

運行hadoop fsck / -delete清除損壞的檔

3.運行hbase hbck -details查看hbase概況,發現Table its007-meta有一個region載入失敗

4.運行hbase hbck -fixMeta嘗試修復系統中繼資料表

5.運行hbase hbck -fix嘗試修復region資料不一致問題。

6.再次運行hbase hbck -details發現問題仍然未修復,那個region仍然載入失敗。

故直接將該region下出錯的檔移走,暫時移至hdfs根目錄

hadoop fs -move /hbase/data/default/its007-meta/fe6463cba743a87e99f9d8577276bada/meta/ 9a853fdbe13046fca194051cb9f69f9b/

fe6463cba743a87e99f9d8577276bada是region的名字

9a853fdbe13046fca194051cb9f69f9b是region下出錯的HFile,有800k大小(注:一個region下可以有多HFile)

7.運行hbase hbck -fix重新載入之前失敗的region,至此完成修復,丟棄了出錯的HFile

總結:

hbase在hdfs上一共兩個檔損壞。 (關於hdfs檔寫入相關文章:hdfs檔寫入相關概念)

一個是oldWALs下的,這個是存放一些沒用的HLog檔的,這裡有檔損壞,說明從WALs中轉移沒用的HLog寫到oldWALs下時,寫了一半斷電導致hdfs上檔資料塊出錯;

另一個是region下一個HFile檔損壞,這個檔800k比較小,應該是從Memstore flush到HFile時,寫了一半沒寫完導致其在hdfs上的檔資料塊出錯。

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.