天天看點

重新format namenode後,datanode無法正常啟動

測試環境,由于測試需求,重新format namenode後,導緻datanode無法正常啟動。

1. 檢視datanode日志,可以發現錯誤“Initialization failed for Block pool <registering> (Datanode Uuid unassigned)”

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<code>2018-01-27 20:09:49,052 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed </code><code>for</code> <code>Block pool &lt;registering&gt; (Datanode Uuid unassigned) service to c6704/192.168.67.104:9000. Exiting.</code>

<code>java.io.IOException: All specified directories are failed to load.</code>

<code>at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478)</code>

<code>at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1361)</code>

<code>at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1326)</code>

<code>at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)</code>

<code>at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:223)</code>

<code>at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:801)</code>

<code>at java.lang.Thread.run(Thread.java:745)</code>

<code>2018-01-27 20:09:49,056 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed </code><code>for</code> <code>Block pool &lt;registering&gt; (Datanode Uuid unassigned) service to c6705/192.168.67.105:9000. Exiting.</code>

<code>2018-01-27 20:09:49,069 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service </code><code>for</code><code>: Block pool &lt;registering&gt; (Datanode Uuid unassigned) service to c6705/192.168.67.105:9000</code>

<code>2018-01-27 20:09:49,070 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service </code><code>for</code><code>: Block pool &lt;registering&gt; (Datanode Uuid unassigned) service to c6704/192.168.67.104:9000</code>

<code>2018-01-27 20:09:49,192 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Removed Block pool &lt;registering&gt; (Datanode Uuid unassigned)</code>

<code>2018-01-27 20:09:51,193 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting Datanode</code>

<code>2018-01-27 20:09:51,204 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 0</code>

<code>2018-01-27 20:09:51,208 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:</code>

<code>/************************************************************</code>

<code>SHUTDOWN_MSG: Shutting down DataNode at c6706.python279.org/192.168.67.106</code>

<code>************************************************************/</code>

2. 經過百度,根據日志描述,原因是datanode的clusterID 和 namenode的clusterID 不比對。

打開hdfs-site.xml中關于datanode和namenode對應的目錄,分别打開其中的current/VERSION檔案,進行對比。

3. namenode的VERSION内容如下:

<code>[hdfs@c6704 $ cat /data/hadoop/hdfs/name/current/VERSION</code>

<code>#Sat Jan 27 00:46:30 UTC 2018</code>

<code>namespaceID=1148548909</code>

<code>clusterID=CID-aedb2e82-77f2-4056-b676-dca88083215d</code>

<code>cTime=0</code>

<code>storageType=NAME_NODE</code>

<code>blockpoolID=BP-1099214307-192.168.67.104-1517013990445</code>

<code>layoutVersion=-63</code>

4. datanode的VERSION檔案内容如下:

<code>[hdfs@c6706 ~]$ cat /data/hadoop/hdfs/data/current/VERSION</code>

<code>#Sat Jan 27 00:20:21 UTC 2018</code>

<code>storageID=DS-8f0fdd04-e967-43cd-bd41-93b826b675b8</code>

<code>clusterID=CID-b27ecfd8-64ba-4e43-bd82-4ef6f2edd60c</code>

<code>datanodeUuid=264b1b43-82c0-411c-859f-32761edc7465</code>

<code>storageType=DATA_NODE</code>

<code>layoutVersion=-56</code>

<code>5. namenode和datano</code>

de的版本是不同的,決定備份datanode,并清空VERSION,然後啟動datanode,問題依舊。檢查VERSION,内容是空的。

<code>[hdfs@c6706 current]$ cp VERSION VERSION.bk</code>

<code>[hdfs@c6706 current]$ echo &gt; VERSION</code>

<code>[hdfs@c6706 current]$ cat VERSION</code>

6. 删除VERSION,再次啟動datanode,VERSION内容已經同步。

<code>$ cat VERSION</code>

<code>#Sun Jan 28 01:29:46 UTC 2018</code>

<code>storageID=DS-1c1f5e05-df2c-40de-b39b-d6d54e3c4894</code>

<code>clusterID=CID-aedb2e82-77f2-4056-b676-dca88083215d    ##&lt;&lt;&lt;&lt;&lt;同步了</code>

<code>datanodeUuid=948d5780-053e-4752-9476-fb1d1debda72</code>

7. 通過頁面也可以查詢到datanode了。

8. 問題原因

執行hdfs namenode -format後,current目錄會删除并重新生成,其中VERSION檔案中的clusterID也會随之變化,而datanode的VERSION檔案中的clusterID保持不變,造成兩個clusterID不一緻。

是以為了避免這種情況,可以再執行的namenode格式化之後,删除datanode的current檔案夾,或者修改datanode的VERSION檔案中出clusterID與namenode的VERSION檔案中的clusterID一樣,然後重新啟動datanode。

本文轉自 hsbxxl 51CTO部落格,原文連結:http://blog.51cto.com/hsbxxl/2066487,如需轉載請自行聯系原作者

繼續閱讀