Hadoop namenode重新格式化需注意問題

2021-08-18 04:41:35 字數 1647 閱讀 5545

$ hadoop namenode -format
(2)hadoop的namenode元資料目錄(即hdfs-site.xml配置檔案中的dfs.namenode.name.dir屬性,預設值是$/dfs/name),同樣如果沒有配置該屬性,那麼hadoop在格式化時將自行建立。必須注意的是在格式化前必須清楚所有子節點(即datanode節點)dfs/name下的內容,否則在啟動hadoop時子節點的守護程序會啟動失敗。這是由於,每一次format主節點namenode,dfs/name/current目錄下的version檔案會產生新的clusterid、namespaceid。但是如果子節點的dfs/name/current仍存在,hadoop格式化時就不會重建該目錄,因此形成子節點的clusterid、namespaceid與主節點(即namenode節點)的clusterid、namespaceid不一致。最終導致hadoop啟動失敗。

hadoop集群啟動namenode時,用jps檢視datanode沒有啟動。

原因分析:

由於在core-site.xml,hdfs-site.xml檔案中,我沒有設定如下內容。

core-site.xml內容如下:

hadoop.tmp.dir

file:/usr/local/hadoop/tmp

abase for other temporary directories.

fs.defaultfs

hdfs://localhost:9000

hdfs-site.xml內容如下:

dfs.replication

1dfs.namenode.name.dir

file:/usr/local/hadoop/tmp/dfs/name

dfs.datanode.data.dir

file:/usr/local/hadoop/tmp/dfs/data

導致系統啟動後會預設讀取linux根目錄下的tmp/hadoop-hadoop/下的檔案。

如果系統沒有重啟,這個目錄不會被系統清理掉,儲存了namenode和datanode相關資訊。

這樣下次啟動hadoop時(不論是重新格式化hdfs檔案系統,還是其他操作),hadoop還是會讀取預設位置,也就是tmp/hadoop-hadoop/下的檔案作為namenode、datanode的配置資訊。

而,重新格式化之後,namenode會重新生成,但儲存在tmp/hadoop-hadoop中的datanode配置資訊,不會重新生成。

兩個cluster-id衝突,導致啟動datanode失敗。

解決辦法:

一:(已驗證)

在core-site.xml,hdfs-site.xml檔案中,顯示確定namenode和datanode配置檔案的位置。

設定內容見上。

重啟hadoop,成功。無論是重新格式化hdfs,還是僅僅啟動namenode、datanode,都沒問題。

二:(根據原理推測可行解決方案,未驗證)

系統開機後,只執行一次format操作。(如果不小心format了,則可以先刪除tmp資料夾,rm -r ./tmp然後在執行format等啟動hadoop操作)

後續只是開啟namenode和datanode操作。

這樣就不生成新的namenode cluster id,不會導致id號衝突。

Hadoop namenode無法啟動

最近遇到了乙個問題,執行start all.sh的時候發現jps一下namenode沒有啟動 每次開機都得重新格式化一下namenode才可以 其實問題就出在tmp檔案,預設的tmp檔案每次重新開機會被清空,與此同時namenode的格式化資訊就會丟失 於是我們得重新配置乙個tmp檔案目錄 首先在h...

Hadoop namenode無法啟動

最近遇到了乙個問題,執行start all.sh的時候發現jps一下namenode沒有啟動 每次開機都得重新格式化一下namenode才可以,但這個可不是解決問題的方法啊,總不能每次啟動就把檔案系統格式化一下吧,這還得了 檢視了一下日誌,發現如下錯誤 error org.apache.hadoop...

Hadoop namenode無法啟動

最近遇到了乙個問題,執行start all.sh的時候發現jps一下namenode沒有啟動 每次開機都得重新格式化一下namenode才可以 其實問題就出在tmp檔案,預設的tmp檔案每次重新開機會被清空,與此同時namenode的格式化資訊就會丟失 於是我們得重新配置乙個tmp檔案目錄 首先在h...