一礁扮、記一次“不合格”的方法
這種方法也是網(wǎng)上參考博客得來的,一開始就覺得有問題,后來真的發(fā)現(xiàn)了問題材蛛。
- 首先停止已經(jīng)啟動的hadoop:
[hadoop@localhost ~]$ stop-all.sh
- 然后查看hadoop配置文件hdfs-site.xml,確定dfs.name.dir、dfs.data.dir以及Hadoop.tmp.dir所指定的目錄怎抛,并將其刪除卑吭。我的hadoop配置的目錄都在${HADOOP_HOME}/tmp目錄下,故將此目錄刪除就可以了:
[hadoop@localhost ~]$ rm -rf tmp
- 最后重新執(zhí)行hadoop格式化HDFS的命令:
[hadoop@localhost ~]$ hadoop namenode -format
- 格式化完成后马绝,啟動hadoop豆赏,并驗證是否格式化成功:
#啟動hadoop
[hadoop@localhost ~]$ start-all.sh
#在hadoop文件系統(tǒng)中新建一個測試目錄
[hadoop@localhost ~]$ hdfs dfs -mkdir /test
#分別在master和slave節(jié)點上查看新建的test目錄,發(fā)現(xiàn)目錄都可以查看到
[hadoop@localhost ~]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2017-03-19 14:19 /test
顯然富稻,在HDFS文件系統(tǒng)中新建的test目錄在mater和slave節(jié)點中都可以查看的到掷邦,但是,這就說明重新格式化成功了嗎椭赋?
- 存在的問題
當(dāng)我在slave節(jié)點執(zhí)行jps時抚岗,發(fā)現(xiàn)datenode進(jìn)程不存在!
[hadoop@localhost ~]$ jps
22533 Jps
22369 NodeManager
二哪怔、問題產(chǎn)生的原因及修正方法
在網(wǎng)上查資料發(fā)現(xiàn)儿普,問題產(chǎn)生的原因是重新格式化HDFS時,只刪除了master節(jié)點上的指定目錄爷辙,但是沒有刪除slaves節(jié)點上的相應(yīng)目錄。
當(dāng)我們執(zhí)行文件系統(tǒng)格式化時挟鸠,會在namenode數(shù)據(jù)文件夾(即配置文件中dfs.name.dir在本地系統(tǒng)的路徑)中保存一個current/VERSION文件,記錄namespaceID篷扩,標(biāo)識了所格式化的 namenode的版本兄猩。如果我們頻繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系統(tǒng)的路徑)的current/VERSION文件只是你第一次格式化時保存的namenode的ID鉴未,因此就會造成datanode與namenode之間的id不一致枢冤。
- 我們來看master節(jié)的namespaceId:
[hadoop@localhost ~]$ cat tmp/dfs/name/current/VERSION
#Sun Mar 19 14:13:51 CST 2017
namespaceID=901261394
clusterID=CID-5f83be8b-32e9-46ec-818c-404bd6dae38a
cTime=0
storageType=NAME_NODE
blockpoolID=BP-358141862-10.10.18.236-1489904031006
layoutVersion=-63
- 再來看slave節(jié)點的ID:
[hadoop@localhost ~]$ cat tmp/dfs/data/current/VERSION
#Sun Mar 19 14:08:39 CST 2017
storageID=DS-91139d5d-43a0-4f9f-b523-8c4c8172f96c
clusterID=CID-9a1fa32b-018a-4466-af12-366444622470
cTime=0
datanodeUuid=b492e32e-a90e-4bab-84b0-ee4b4092b1d0
storageType=DATA_NODE
layoutVersion=-56
并沒有在slave節(jié)點中發(fā)現(xiàn)namespaceID,不過master和slave都有clusterID,我嘗試將slave節(jié)點中的clusterID改為和master的clusterID一致铜秆,然后重啟hadoop淹真,發(fā)現(xiàn)正常了:
[hadoop@localhost ~]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2017-03-19 14:19 /test
三、總結(jié)
- 總結(jié):重新格式化集群HDFS的正確方法是將集群中相應(yīng)的目錄都刪除连茧,然后執(zhí)行格式化命令核蘸。
1、重新格式化意味著集群的數(shù)據(jù)會被全部刪除啸驯,格式化前需考慮數(shù)據(jù)備份或轉(zhuǎn)移問題客扎;
2、先刪除主節(jié)點(即namenode節(jié)點)罚斗,Hadoop的臨時存儲目錄tmp徙鱼、namenode存儲永久性元數(shù)據(jù)目錄dfs/name、Hadoop系統(tǒng)日志文件目錄log 中的內(nèi)容 (注意是刪除目錄下的內(nèi)容不是目錄)针姿;
3袱吆、刪除所有數(shù)據(jù)節(jié)點(即datanode節(jié)點) ,Hadoop的臨時存儲目錄tmp距淫、namenode存儲永久性元數(shù)據(jù)目錄dfs/name绞绒、Hadoop系統(tǒng)日志文件目錄log 中的內(nèi)容;
4榕暇、格式化一個新的分布式文件系統(tǒng):
hadoop namenode -format