轉自:http://xuyuanshuaaa.iteye.com/blog/1188367
錯誤1:bin/hadoop dfs 不能正常啟動,持續提示:
INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 0 time(s).
原因:由於 dfs 的部分文件默認保存在tmp文件夾,在系統重啟時被刪除。
解決:修改core-site.xml 的 hadoop.tmp.dir配置文件路徑:/home/hadoop/tmp。
錯誤2:hadoop出現了一些問題。用$ bin/hadoop dfsadmin -report 測試的時候,發現dfs沒有加載。
顯示如下:
Configured Capacity: 0 (0 KB)
Present Capacity: 0 (0 KB)
DFS Remaining: 0 (0 KB)
DFS Used: 0 (0 KB)
DFS Used%: ?%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
查看日志:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/hadoop/data: namenode namespaceID = 2033006627; datanode namespaceID = 1589898341
經分析,是由於namenode namespaceID = 2033006627;和datanode namespaceID = 1589898341 不一致造成原因。
修改了namenode namespaceID = 1589898341 可以使用,但是重啟之后,又不可以用了。
最后解決方案:刪除hadoop用戶下的name文件夾,data文件夾,tmp文件夾,temp文件里的內容,然后重新執行namenode命令。
(在datanode的存儲數據結果中,最大的數據結構是storage,實現類中用版本控制信息。如果hadoop調整文件結果布局,version就會改變。以保證文件結構和應用一致);
重啟電腦之后,正常。
錯誤3:File /home/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
出現此錯誤,一般發生在datanode與namenode還沒有進行連接,就開始往hdfs系統上put數據了。稍等待一會,就可以了。
也可以使用:hadoop dfsadmin –report命令查看集群的狀態。
錯誤4:
每次啟動總有部分datanade不能去全部啟動,查看日志文件,顯示為:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.net.UnknownHostException: zgchen-ubutun: zgchen-ubutun at java.net.InetAddress.getLocalHost(InetAddress.java:1426)。
分析:這是由於 datanode 找不到服務host引起的。
解決:通過查找/etc/hostname 找到hostname;比如:ubuntu。
然后找到/etc/hosts ,添加:127.0.1.1 ubuntu
錯誤5:
java.lang.OutOfMemoryError: GC overhead limit exceeded
分析:這個是JDK6新添的錯誤類型。是發生在GC占用大量時間為釋放很小空間的時候發生的,是一種保護機制。解決方案是,關閉該功能,可以添加JVM的啟動參數來限制使用內存: -XX:-UseGCOverheadLimit
添加位置是:mapred-site.xml 里新增項:mapred.child.java.opts 內容:-XX:-UseGCOverheadLimit
java.lang.OutOfMemoryError: Java heap space
出現這種異常,明顯是jvm內存不夠得原因,要修改所有的datanode的jvm內存大小。
Java -Xms1024m -Xmx4096m
一般jvm的最大內存使用應該為總內存大小的一半,我們使用的8G內存,所以設置為4096m,這一值可能依舊不是最優的值。(其實對於最好設置為真實物理內存大小的0.8)
錯誤6:Too many fetch-failures
Answer:
出現這個問題主要是結點間的連通不夠全面。
1) 檢查 、/etc/hosts
要求本機ip 對應 服務器名
要求要包含所有的服務器ip + 服務器名
2) 檢查 .ssh/authorized_keys
要求包含所有服務器(包括其自身)的public key
錯誤7:處理速度特別的慢 出現map很快 但是reduce很慢 而且反復出現 reduce=0%
Answer:
結合第二點,然后修改可用內存大小。
conf/hadoop-env.sh 中的export HADOOP_HEAPSIZE=4000
錯誤8:能夠啟動datanode,但無法訪問,也無法結束的錯誤
在重新格式化一個新的分布式文件時,需要將你NameNode上所配置的dfs.name.dir這一namenode用來存放NameNode 持久存儲名字空間及事務日志的本地文件系統路徑刪除,同時將各DataNode上的dfs.data.dir的路徑 DataNode 存放塊數據的本地文件系統路徑的目錄也刪除。如本此配置就是在NameNode上刪除/home/hadoop/NameData,在DataNode上 刪除/home/hadoop/DataNode1和/home/hadoop/DataNode2。這是因為Hadoop在格式化一個新的分布式文件系 統時,每個存儲的名字空間都對應了建立時間的那個版本(可以查看/home/hadoop /NameData/current目錄下的VERSION文件,上面記錄了版本信息),在重新格式化新的分布式系統文件時,最好先刪除NameData 目錄。必須刪除各DataNode的dfs.data.dir。這樣才可以使namedode和datanode記錄的信息版本對應。
注意:刪除是個很危險的動作,不能確認的情況下不能刪除!!做好刪除的文件等通通備份!!
錯誤9:java.io.IOException: Could not obtain block: blk_194219614024901469_1100 file=/user/hive/warehouse/src_20100924_log/src_20100924_log
出現這種情況大多是結點斷了,沒有連接上。或者 mapred.tasktracker.map.tasks.maximum 的設置 超過 cpu cores數目,導致出現獲取不到文件。
錯誤10:Task Id : attempt_201010291615_0001_m_000234_0, Status : FAILED Error: java.io.IOException: No space left on device
Task Id : attempt_201010291615_0001_m_000240_0, Status : FAILED java.io.IOException: Spill failed
磁盤空間不夠,應該分析磁盤空間df -h 檢查是否還存在磁盤空間。
錯誤11:Task Id : attempt_201011011336_0007_m_000001_0, Status : FAILED
org.apache.hadoop.hbase.client.RegionOfflineException: region offline: lm,,1288597709144
網上說,將/hbase刪除;重啟hbase后,可以正常應用了。但是我找不到/hbase目錄,只好自己重新刪除掉一些hadoop文件,重新生成文件管理系統。
還有一個可能是,配置錯了/hbase/conf/hbase-env.sh的HBASE_CLASSPATH,這個默認是不配置的,所以可以不配置。
錯誤12:org.apache.hadoop.hbase.TableNotFoundException: org.apache.hadoop.hbase.TableNotFoundException: lm
找不到表,hbase啟動了,檢查一下是否存在需要的Htable。