Hadoop問題:DataNode進程不見了

DataNode進程不見了

問題描述

    最近配置Hadoop的時候出現了這麼一個現象,啓動以後,使用jps命令以後是這樣的:java

    看不到DataNode進程,可是可以正常的工做,是否是很神奇啊?node

    在一番百度谷歌以後,得出告終論:程序員

    我在啓動Hadoop以前和啓動以後,曾經屢次使用以下命令,針對NameNode進行格式化:分佈式

hadoop namenode -format

    這個問題,還不是你直接屢次格式化形成的,而是你格式化以後,啓動了Hadoop,而後將Hadoop關閉,從新格式化,再啓動Hadoop形成的,這個時候你就發現,DataNode線程在jps命令中消失了,還能正常使用,就如我開頭的那張圖同樣。形成這個問題的根源,是NameNode和DataNode的版本號不一致所致。這個問題不單單會出如今僞分佈式,徹底分佈式中也會出現。這裏以僞分佈式進行展現。oop

    以下是正常的兩個文件的信息。ui

    NameNode VERSION文件信息:spa

namespaceID=51628800
clusterID=CID-97bb16dc-c439-427c-9841-5e6e4667cb65
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1918730739-172.17.241.131-1526803461127
layoutVersion=-63

    DataNode VERSION文件信息:線程

storageID=DS-4281731b-7a44-4c86-8844-e1927a4fc966
clusterID=CID-97bb16dc-c439-427c-9841-5e6e4667cb65
cTime=0
datanodeUuid=197c3d68-454b-4287-a5e5-90c01ed9be53
storageType=DATA_NODE
layoutVersion=-56

    所謂版本號不一致,就是說的clusterID的值,上面的信息展現的是一致的,也代表NameNode和DataNode是一組的。3d

    那麼這兩個文件存放在哪裏呢?以下是你在Hadoop配置文件core-site.xml中的一項,就在此項指定的目錄之下。code

<property>
		<!--用來指定hadoop運行時產生文件的存放目錄-->	
		<name>hadoop.tmp.dir</name> 
		<value>/home/hadoop-2.7.1/tmp</value>
	</property>

    那我就以我這個配置的路徑來進行查找,首先到tmp目錄下:

    如上圖是完整的查找路徑。

問題分析

    下面進行此問題的分析:

    當第一次格式化,啓動Hadoop的時候,沒有任何問題,任何環節都是新產生的,因此哪怕你在啓動Hadoop以前進行屢次的NameNode格式化均可以,由於在Hadoop啓動以前,DataNode的版本尚未生成,只有Hadoop啓動以後DataNode的版本等響應信息纔會在指定的目錄下生成,這個時候就產生了NameNode和DataNode的一對一的關係。

    當你關掉Hadoop以後進行二次NameNode格式化的時候,NameNode的版本信息等進行了從新寫入,內容確定和以前的不同,這樣就形成了,上文中我提到的clusterID不一致的問題,這樣,你再次啓動Hadoop,全部功能都正常使用,但惟獨jps命令下看不到DataNode線程,這固然會使咱們每一個程序員感到驚慌,怎麼辦?

解決方案

方案一

    首先,在格式化以前,將你設置的存儲Hadoop信息目錄下清空,即我上圖中的例子tmp目錄,將此目錄清空便可。也可直接刪除此目錄,而後新建一個。

    而後,進行格式化,這樣所產生的NameNode和DataNode信息都是新的,也都是一組的,問題就解決了,這個是最簡單最有效的方法。

方案二

    若是有數據還在,又不想清空數據,那麼這個方案就是你的福音。

    既然是版本號不一致產生的問題,那麼咱們就單獨解決版本號的問題,將你格式化以後的NameNode的VERSION文件找到,而後將裏面的clusterID進行復制,再找到DataNode的VERSION文件,將裏面的clusterID進行替換,保存以後重啓,那麼就能夠正常的使用了。查找的的路徑,已經在上圖中進行了展現,這裏不作贅述。

 

    就以上問題,目前我只想到兩個解決方案,若是還有,我會在這裏進行更新。

相關文章
相關標籤/搜索