由於數據磁盤爆滿,達到100%,導致journalnode宕掉,在啟動journalnode以后,查看日志,提示Can't scan a pre-transactional edit log,這個時候namenode已經是不能正常啟動了。
java.io.IOException: Can't scan a pre-transactional edit log.
at org.apache.hadoop.hdfs.server.namenode.FSEditLogOp$LegacyReader.scanOp(FSEditLogOp.java:4974)
at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.scanNextOp(EditLogFileInputStream.java:245)
at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.scanEditLog(EditLogFileInputStream.java:355)
at org.apache.hadoop.hdfs.server.namenode.FileJournalManager$EditLogFile.scanLog(FileJournalManager.java:551)
at org.apache.hadoop.hdfs.qjournal.server.Journal.scanStorageForLatestEdits(Journal.java:192)
at org.apache.hadoop.hdfs.qjournal.server.Journal.<init>(Journal.java:152)
at org.apache.hadoop.hdfs.qjournal.server.JournalNode.getOrCreateJournal(JournalNode.java:90)
at org.apache.hadoop.hdfs.qjournal.server.JournalNode.getOrCreateJournal(JournalNode.java:99)
at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.getEditLogManifest(JournalNodeRpcServer.java:189)
at
解決辦法:
1、刪除數據磁盤的一些無用的數據,讓磁盤有一定的空間,只要空間>0k,journalnode就可以正常啟動,我這邊就是某一塊盤一點磁盤空間都沒有,可用空間0k。導致在啟動journalnode的時候提示磁盤空間不足,說到底,還是集群在規划的時候沒有預留磁盤空間導致的,給差評。
2、報上述的 Can't scan a pre-transactional edit log 錯誤,就是由於journalnode維護的eidts文件損壞,這個時候,看一下journalnode幾台節點,哪一台是好的,先刪除損壞的journalnode的數據文件,然后把這台好的journalnode文件拷貝到其他的節點。
3、修改拷貝過來的數據文件的權限
4、重啟journalnode。