搭建Hadoop集羣時把DataNode召回來

在搭建完Hadoop集羣后,最讓人激動的時刻莫過於啓動Hadoop了,看到namenode出來了,簡直高興得跳起來啦。但是,在slave機器上jps並沒有datanode,此刻又陷入了苦惱了。
我們現在先挑出來形象的講講,id這個東西就是一個事物的唯一標識了,如人的身份證號,又或者是手機的序列號等等。在這裏,master和slave是一個集羣,那麼它們也有自己的id號的,而且一個集羣裏的id都是一樣的。假如master和其中一臺slave所持有的id不一致,那就意味着不在一個集羣了。
迴歸正題,那個id到底藏在了哪裏呢?
這就要我們去找之前搭建hadoop所配置的hdfs-site.xml文件中查看你配置的路徑了;如下圖。這個目錄是我們格式化的時候產生的,這個路徑下有一個current目錄,用來存放namenode的核心數據的,接着它裏面有一個集羣的標誌文件VERSION,記錄了一系列集羣的標識id。
在這裏插入圖片描述
按照上圖的路徑的話,我們去/opt/hadoop/hdfs/name目錄下,目錄裏有個current的目錄,裏面有一個VERSION的文件,接着“cat”命令查看文件內容;
在這裏插入圖片描述
VERSION內容如下,其中有一個clusterID,這個就是上面的集羣標識ID了,那麼這樣的話,在slave機器裏的datanode的數據文件下的clusterID會跟下面的master的namenode數據文件的clusterID一致了,否則它們就不是一個集羣下的節點了。
在這裏插入圖片描述
以相同的辦法打開並查看datanode數據文件下的VERSION標識ID文件,如下圖:
在這裏插入圖片描述
對比兩個的clusterID是一致的,所以它們是在一個集羣的,所以就有了master開啓並工作之後,slave下的datanode也跟着幫“社團老大”工作了,否則不在一個集羣是找不到“社團老大”就無法工作了。

其中的原因是:我們在啓動集羣前又格式化了一次,此時重新生成一個namenode的數據文件並重新生成VERSION文件,但是datanode的version文件不會同步更新,導致了datanode的clusterID和namenode的clusterID不一致,最終造成datanode無法啓動。

到這裏就很容易理解啦,解決辦法有兩個:

  1. 把namenode節點和datanode節點下的數據文件刪除了,再重新格式化一次,按照上圖的話,就把/opt/hadoop/hdfs這個目錄以及目錄下的文件都刪除。
  2. 把master機器上namenode的clusterID複製到slave機器上datanode的clusterID,保持一致。

然後就是這兩個方法的選擇了,呃呃呃!我覺得呢,如果是剛剛搭建的Hadoop就選擇第一個了,原因有二:一、剛搭建沒有重要數據,簡單粗暴;二、就是擔心還存在除了clusterID的問題還有其他沒發現的原因,那就乾脆重來了;那麼,如果是後來工作了許久的Hadoop的話,因爲存在着重要數據就選擇第二種了,所以就選擇第二種啦!

這樣就把走失的datanode召回到集羣裏了!

如果以上還沒解決就移步到這裏參考啦!

若有不足之處望留言!

——————END———————
Programmer:柘月十七

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章