天天看點

datanode啟動後報Initialization failed for Block pool registering

作者:滌生大資料

1. 案發現場還原

datanode節點因為壞盤,機器卡死掉線,datanode退役。把壞盤目錄去掉後,重新開機datanode後,出現運作一會後dn自動挂掉的情況。

datanode啟動後報Initialization failed for Block pool registering

檢視日志報錯如下:

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
************************************************************/           
datanode啟動後報Initialization failed for Block pool registering

2. 分析解決

因為這種是一個大類報錯,抛出的異常

排查1: namenode 和 datanode 叢集 ID 不比對?

datanode啟動後報Initialization failed for Block pool registering
datanode啟動後報Initialization failed for Block pool registering

仔細檢視了異常節點的所有資料盤符下的clusterid和namenode的ClusterID發現并沒有不同,排除此方法。

尖叫提示:

注意,這種clusterID不一緻的情況,一般是是叢集namenode 格式化時才會出現的情況,比如叢集下線了一個節點,然後重新格式化namenode,再把已經下線的節點上線叢集,發現報錯,clusterid不一緻(因為格式化叢集會重新配置設定clusterid),這種clusterid不一緻的一般是小白學習中才會出現的,生産叢集你給我格式化namenode看看,老闆會讓你懷疑人生,牢底坐穿。

是以這種解決方式比如重新格式化namenode,格式化叢集肯定可以解決問題,但是不具有實際實操意義。跟你重裝一下叢集一個道理,簡單粗暴沒啥意義。

排查2: uuid不一緻的問題?

其實一般不會有這種問題,比如uuid不一緻等。

排查3:磁盤資料目錄有異常,讀取資料異常,造成整個節點挂了。

開啟日志的debug模式,檢視詳細資訊,慎用,因為會有大量日志,記得關閉

datanode啟動後報Initialization failed for Block pool registering
datanode啟動後報Initialization failed for Block pool registering

日志檢視是/hadoop7資料目錄有問題,進入檢視,

datanode啟動後報Initialization failed for Block pool registering

問題解決:

發現hadoop7目錄下有個資料目錄權限異常,造成加載失敗,造成整個dn加載失敗,無法注冊。首先把/hadoop7目錄直接從datanode的data_dir中删除。重新啟動dn即可。

尖叫提示:

有時候報錯隻是一個大類的報錯,抛出的異常,誘因有可能有多種。是以這個時候去檢視詳細的日志,debug日志,看日志從哪裡開始異常的,逐漸排查,而不是直接檢視fetal失敗的日志去百度,大類報錯很難百度到問題。生産叢集一個大類報錯往往有很多種誘因造成,排查是個細緻活,盡可能檢視詳細的日志。

繼續閱讀