HDFS standbyNameNode Java.io.IOException:Premature EOF from inputStream[運維必備]

1、報錯

Java.io.IOException:Premature EOF from inputStream

在這裏插入圖片描述

可以看到是重演編輯日誌時候出錯了

2、hadoop元數據目錄

在這裏插入圖片描述
在這裏插入圖片描述

Edits_                 編輯日誌
Fsimage_               通過編輯日誌合併而來的
Edits_inprogress       正在往裏寫的編輯日誌
Seen_txid              類似於偏移量,保存了最後一條數據txid,每次重啓namenode重演編輯日誌時會從fsimage讀到保存的id處
VERSION                保存集羣id跟塊池id等信息

雙namenode
備用namenode會定時的進行edits合併,合併爲fsimage,備用namenode長時間不工作會導致edits越來越多,重演編輯日誌時會造成堆內存溢出,啓動失敗

3、查看編輯日誌方式

Hadoop客戶端提供查看編輯日誌與fsimage命令

可以導出爲xml
hdfs oiv -p XML -i fsimage_0000000000000092691 -o fsimage.xml 

hdfs oev -i edits_0000000000000091059-0000000000000092691 -o edit.xml  

4、排查

1)每次重啓namenode時候都會卡在同一個編輯日誌,除了fsimage會從本地進行讀取,未合併的edits會通過http協議從journalnode獲取
2)這樣來看,跟備用namenode 元數據目錄下的數據關係不大,journalnode一共存了三份,理論上應該有驗證機制,日誌不會有太大問題,除非主namenode寫日誌時就有問題。
3)查看是否edits日誌文件損壞,通過導出xml命令,如果是因爲文件損壞那麼,到處xml時候也會報錯,但是發現可以正常導出xml,xml文件也有正常的開始結束標記。
4)繼續查看報錯日誌,可以看到每次失敗時候都會進行多次GC,那可能是與jvm內存有關。調大JVM堆內存(基於CDH修改)
5)重啓namenode成功。

在這裏插入圖片描述

5、解決問題

調大jvm堆內存

6、避免此類問題出現

儘量避免長時間單namenode進行工作,這樣導致未合併的編輯日誌越來越多,下次重演日誌時內存不足。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章