1. 案發現場還原
datanode節點因為壞盤,機器卡死掉線,datanode退役。把壞盤目錄去掉後,重新開機datanode後,出現運作一會後dn自動挂掉的情況。
檢視日志報錯如下:
1月 8, 上午10點26:12.689 WARN org.apache.hadoop.hdfs.server.common.Storage
Failed to analyze storage directories for block pool BP-465426754-10.5.32.151-1456251355718
java.io.IOException: BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: /hadoop8/dfs/dn/current/BP-465426754-10.5.32.151-1456251355718
at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.loadBpStorageDirectories(BlockPoolSliceStorage.java:212)
at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.recoverTransitionRead(BlockPoolSliceStorage.java:244)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:395)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:477)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1424)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1385)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829)
at java.lang.Thread.run(Thread.java:745)
11月 8, 上午10點26:12.690 WARN org.apache.hadoop.hdfs.server.common.Storage
Failed to add storage for block pool: BP-465426754-10.5.32.151-1456251355718 : BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: /hadoop8/dfs/dn/current/BP-465426754-10.5.32.151-1456251355718
11月 8, 上午10點26:12.690 INFO org.apache.hadoop.hdfs.server.common.Storage
Storage directory [DISK]file:/hadoop9/dfs/dn/ has already been used.
11月 8, 上午10點26:12.722 INFO org.apache.hadoop.hdfs.server.common.Storage
Analyzing storage directories for bpid BP-465426754-10.5.32.151-1456251355718
11月 8, 上午10點26:12.722 WARN org.apache.hadoop.hdfs.server.common.Storage
Failed to analyze storage directories for block pool BP-465426754-10.5.32.151-1456251355718
java.io.IOException: BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: /hadoop9/dfs/dn/current/BP-465426754-10.5.32.151-1456251355718
at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.loadBpStorageDirectories(BlockPoolSliceStorage.java:212)
at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.recoverTransitionRead(BlockPoolSliceStorage.java:244)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:395)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:477)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1424)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1385)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829)
at java.lang.Thread.run(Thread.java:745)
核心最後fetal報錯如下,dn服務停止:
11月 8, 上午10點26:12.723 WARN org.apache.hadoop.hdfs.server.common.Storage
Failed to add storage for block pool: BP-465426754-10.5.32.151-1456251355718 : BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: /hadoop9/dfs/dn/current/BP-465426754-10.5.32.151-1456251355718
11月 8, 上午10點26:12.723 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode
Initialization failed for Block pool <registering> (Datanode Uuid 889c4b61-14c2-4bca-8ad0-6f7d378511cd) service to bd15-21-33-62/10.90.48.127:8040. Exiting.
java.io.IOException: All specified directories are failed to load.
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1424)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1385)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829)
at java.lang.Thread.run(Thread.java:745)
11月 8, 上午10點26:12.723 WARN org.apache.hadoop.hdfs.server.datanode.DataNode
Ending block pool service for: Block pool <registering> (Datanode Uuid 889c4b61-14c2-4bca-8ad0-6f7d378511cd) service to bd15-21-33-62/10.90.48.127:8040
11月 8, 上午10點26:12.723 INFO org.apache.hadoop.hdfs.server.datanode.DataNode
Removed Block pool <registering> (Datanode Uuid 889c4b61-14c2-4bca-8ad0-6f7d378511cd)
11月 8, 上午10點26:14.724 WARN org.apache.hadoop.hdfs.server.datanode.DataNode
Exiting Datanode
11月 8, 上午10點26:14.726 INFO org.apache.hadoop.util.ExitUtil
Exiting with status 0
11月 8, 上午10點26:14.729 INFO org.apache.hadoop.hdfs.server.datanode.DataNode
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at bd15-21-131-85/10.21.131.85
************************************************************/
2. 分析解決
因為這種是一個大類報錯,抛出的異常
排查1: namenode 和 datanode 叢集 ID 不比對?
仔細檢視了異常節點的所有資料盤符下的clusterid和namenode的ClusterID發現并沒有不同,排除此方法。
尖叫提示:
注意,這種clusterID不一緻的情況,一般是是叢集namenode 格式化時才會出現的情況,比如叢集下線了一個節點,然後重新格式化namenode,再把已經下線的節點上線叢集,發現報錯,clusterid不一緻(因為格式化叢集會重新配置設定clusterid),這種clusterid不一緻的一般是小白學習中才會出現的,生産叢集你給我格式化namenode看看,老闆會讓你懷疑人生,牢底坐穿。
是以這種解決方式比如重新格式化namenode,格式化叢集肯定可以解決問題,但是不具有實際實操意義。跟你重裝一下叢集一個道理,簡單粗暴沒啥意義。
排查2: uuid不一緻的問題?
其實一般不會有這種問題,比如uuid不一緻等。
排查3:磁盤資料目錄有異常,讀取資料異常,造成整個節點挂了。
開啟日志的debug模式,檢視詳細資訊,慎用,因為會有大量日志,記得關閉
日志檢視是/hadoop7資料目錄有問題,進入檢視,
問題解決:
發現hadoop7目錄下有個資料目錄權限異常,造成加載失敗,造成整個dn加載失敗,無法注冊。首先把/hadoop7目錄直接從datanode的data_dir中删除。重新啟動dn即可。
尖叫提示:
有時候報錯隻是一個大類的報錯,抛出的異常,誘因有可能有多種。是以這個時候去檢視詳細的日志,debug日志,看日志從哪裡開始異常的,逐漸排查,而不是直接檢視fetal失敗的日志去百度,大類報錯很難百度到問題。生産叢集一個大類報錯往往有很多種誘因造成,排查是個細緻活,盡可能檢視詳細的日志。