異常一:
java.lang.Exception: java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:400)
Caused by: java.lang.OutOfMemoryError: Javaheap space
處理方法:這個問題需要調整hadoop運行記憶體。如果用戶端用的是myeclipse,看看eclipse的運行內在是不是充足。
異常二:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:Incompatible namespaceIDs ...datanode namespaceID...,此問題為Namenode上namespaceID與datanode上namespaceID不一致。問題產生原因:每次namenodeformat會重新建立一個namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的資料,但是沒有清空datanode下的資料,所以造成namenode節點上的namespaceID與datanode節點上的namespaceID不一致。啟動失敗。
處理方法:參考該網址http://blog.csdn.net/wh62592855/archive/2010/07/21/5752199.aspx 給出兩種解決方案,我們使用的是第一種解決方案:即:
(1)停掉叢集服務
(2)在出問題的datanode節點上刪除data目錄,data目錄即是在hdfs-site.xml檔案中配置的dfs.data.dir目錄,本機器上那個是/var/lib/hadoop-0.20/cache/hdfs/dfs/data/(註:我們當時在所有的datanode和namenode節點上均執行了該步驟。以防刪掉後不成功,可以先把data目錄儲存一個副本).
(3)格式化namenode.
(4)重新啟動叢集。
問題解決。這種方法帶來的一個副作用即是,hdfs上的所有資料丟失。如果hdfs上存放有重要資料的時候,不建議採用該方法,可以嘗試提供的網址中的第二種方法。
異常三:
Exception in thread "main" org.apache.hadoop.security.AccessControlException:
org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop/172.25.18.183,access=EXECUTE, inode="hadoop":hadoop:supergroup:rw-rw-r--
這個問題是沒有存取權限
後續補充並修訂