- Failed to set setXIncludeAware(true) for parser
遇到此問題通常是jar包沖突的問題。
一種情況是我們向java的lib文件夾加入我們自己的jar包導致hadoop引用jar包的沖突。解決方式就是刪除我們自己向系統加入的jar包,又一次配置。將自己的jar包或者外部jar放入系統文件夾會在編譯程序時帶來方便,可是這不是一種好習慣,我們應該通過改動CLASSPATH的方式指定jar包路徑。
- Cannot lock storage /tmp/hadoop-root/dfs/name. The directory isalready locked
這個錯誤通常是我們在某次配置失敗后。hadoop創建該文件夾,鎖定之后失敗退出造成的。解決方式就是刪除tmp文件夾下hadoop創建的相關文件夾。然后又一次配置。
- localhost Name or service not known
在配置hadoop單節點環境時。須要利用ssh登錄localhost。假設依照網上的方式配置之后還是不能正確登錄localhost,並報上述錯誤,能夠檢查/etc/sysconfig/network和 /etc/hosts下的localhost名字是否一致。有時在某個文件里localhost是凝視掉的。
- ls: Cannot access .: No such file or directory.
當在hadoop中執行ls命令時常會出現這個錯誤,這個錯誤是指hdfs文件系統中當前文件夾為空,並非指本地文件系統中當前文件夾為空。當我們使用hdfs文件系統時,會默認進入/user/username下,這個文件夾不存在於本地文件系統,而是由hdfs內部管理的一個文件夾。
當我們第一次使用ls命令時,/user/username下是空的。所以會提示上述錯誤。當我們加入新的文件之后就不再報該錯。
- Call to localhost/127.0.0.1:9000 failed on connection exception
當在偽分布式環境下執行wordcount演示樣例時,假設報上述錯誤說明未啟動hadoop,利用start-all.sh腳本啟動hadoop環境。
- jps命令沒有datanode執行
一個原因是執行文件系統格式化時,會在namenode數據文件夾(即配置文件里dfs.name.dir在本地系統的路徑)中保存一個current/VERSION文件,記錄namespaceID,標識了所格式化的namenode的版本號。
假設我們頻繁的格式化namenode。那么datanode中保存(即配置文件里dfs.data.dir在本地系統的路徑)的current/VERSION文件僅僅是你第一次格式化時保存的namenode的ID,因此就會造成datanode與namenode之間的id不一致。
解決方式是清空hadoop的tmp文件,重新啟動格式化hdfs。
Retrying connect to server: localhost/127.0.0.1:9000
說明hadoop的namenode進程沒有啟動,導致與namenode無法連接而報錯。能夠先執行stop-all.sh腳本停止hadoop,然后調用start-all.sh重新啟動hadoop。
- jps命令沒有namenode執行
一個可能原因是tmp文件。默認的tmp文件每次又一次開機會被清空,與此同一時候namenode的格式化信息就會丟失。於是我們得又一次配置一個tmp文件文件夾。
能夠通過改動hadoop/conf文件夾里面的core-site.xml文件和hdfs-site.xml:按例如以下形式進行配置(注意改動為你的詳細相應路徑)
改動配置文件 core-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?
> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/Users/wenxiaole/Hadoop/hadoop-1.2.1/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
改動配置文件 hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/Users/wenxiaole/Hadoop/hadoop-1.2.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/Users/wenxiaole/Hadoop/hadoop-1.2.1/tmp/dfs/data</value>
</property>
</configuration>
然后又一次格式化hdfs。
hadoop namenode -format
此外。我們能夠通過查看hadoop的logs文件夾下相關namenode日志查看問題來源。datanode不能啟動時也可查看日志查找問題來源。
- Input path does not exist: hdfs://localhost:9000/user/root/inputfile
執行hadoop程序的時候,輸入文件必須先放入hdfs文件系統中。不能是本地文件,假設是本地文件就會報上述找不到文件的錯誤。解決方式是首先利用put或者copyFromLocal復制文件到hdfs中。然后再執行hadoop程序。
關於Hadoop配置項的一點說明
盡管僅僅須要配置 fs.defaultFS 和 dfs.replication 就能夠執行(官方教程如此)。只是若沒有配置 hadoop.tmp.dir 參數,則默認使用的暫時文件夾為 /tmp/hadoo-hadoop,而這個文件夾在重新啟動時有可能被系統清理掉,導致必須又一次執行 format 才行。所以我們進行了設置。同一時候也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。
提示
利用jps命令查看當前執行的hadoop進程時。和hadoop相關的一系列進程jobtracker、tasktracker、datanode、namenode和SecondaryNameNode的進程號也是很接近的。不會出現上千的差異。
假設發現它們的進程號差異過大,則往往會出錯。這時能夠通過重新啟動解決這個問題。假設多次重新啟動某些進程依然沒有改變。還能夠利用kill -9命令強制殺死進程,然后再重新啟動。
