Hadoop啓動不了Namenode進程,出現IllegalArgumentException異常

此次的問題乍看起來很奇怪,在本機完成配置啓動Hadoop的時候,首先,咱們須要對namenode進行format,可是在執行了命令以後,卻出現了以下的異常:FATAL namenode.NameNode: Exception in namenode join java.lang.IllegalArgumentException: URI has an authority component。別的無論,就衝着這個 authority,我義無反顧地在 format命令前加上了 sudo,結果發現…………木有起到半點做用。 那麼,直接跳過format環節執行start-all呢?結果看起來有點神奇,幾個進程竟然還都跑起來了。不過明眼一看……怪了,惟獨沒有namenode進程(以下圖所示)。經過namenode上50070端口的 Web UI也發現沒法打開網頁。因而查看namenode的log文件,發現又出現了上述的IllegalArgumentException異常;而在datanode的log文件裏,也發現了一大串Retrying connect to server。嗯……好吧……看來得耗上了。 通過幾番查找、嘗試,終於發現了問題的緣由。這個異常的出現主要與這麼兩個文件有關:core-site.xml和hdfs-site.xml。想必進行過Hadoop配置的人對這兩個文件都有着很深的印象,而這兩個文件中,與本問題關係最直接的就是這麼幾個Property: [html] view plaincopy在CODE上查看代碼片派生到個人代碼片 在core-site.xml裏,咱們配置了hadoop.tmp.dir屬性,以我這裏的配置爲例:hadoop.tmp.dirfile:/home/hdusr/hadoop-2.2.0/tmp/[html] view plaincopy在CODE上查看代碼片派生到個人代碼片 在hdfs-site.xml裏,咱們經過以下的方式使用了hadoop.tmp.dir的屬性值(如下的寫法也是Hadoop 2.2中hdfs-site的默認配置值):dfs.namenode.name.dirfile://${hadoop.tmp.dir}/dfs/namedfs.datanode.data.dirfile://${hadoop.tmp.dir}/dfs/data這樣的配置看似沒有什麼大的問題,並且還包含着${hadoop.tmp.dir}這種高端大氣上檔次的靈活性寫法。但問題就出在了這裏,通過實際操做確認,若是咱們用這種變量式的方法對hdfs-site文件中的屬性進行配置就會出現關於URI的權限問題。我的猜想可能由於Hadoop安裝在hdusr目錄,因此啓動hadoop服務過程當中,對hdfs-site文件進行載入時,解析變量式配置信息的中間過程遇到了權限問題(在下對Linux實在是菜鳥中的菜鳥,止步於此,不敢多加妄言)。。 總而言之,IllegalArgumentException出如今本人的這種配置狀況中時,能夠經過把hdfs-site.xml修改成以下形式解決。 [html] view plaincopy在CODE上查看代碼片派生到個人代碼片 爲了解決這個出現的異常,咱們把hdfs-site.xml中的如下兩個屬性修改成:dfs.namenode.name.dirfile:/home/hdusr/hadoop-2.2.0/tmp/dfs/name(即便用完整的絕對地址)dfs.datanode.data.dirfile:/home/hdusr/hadoop-2.2.0/tmp/dfs/name(即便用完整的絕對地址)進過對hdfs-site.xml文件的修改後,終於……namenode成功格式化,而且也可以正常啓動Hadoop服務,啓動後的進程顯示見下圖。 以上只是本人做爲菜鳥的一些不成熟的看法,所言不實之處還請見諒,望各位高人指點,感激涕零。
相關文章
相關標籤/搜索