hadoop 集群常見錯誤解決辦法
1. 錯誤現象:Java.NET.NoRouteToHostException: No route to host.
原因:master服務器上的防火牆沒有關閉。
解決方法: 在master上關閉防火牆: chkconfig iptables off.
2. 錯誤現象:org.apache.hadoop.ipc.RPC: Server at JMN/10.22.1.203:9000 not available yet. /* JMN/10.22.1.203 是 hadoop集群當中master的主機名/ip */
原因:/etc/hosts中的文件被自動篡改。
解決方法: 將/etc/hosts 文件按配置文件要求改回來。
3. 錯誤現象:Too many fetch-failures.
原因:結點間的連通不夠全面。
解決方法:
1) 檢查 /etc/hosts要求本機ip對應服務器名,並且包含所有的服務器ip和服務器名。
2) 檢查 .ssh/authorized_keys要求包含所有服務器(包括其自身)的public key。
(二) 在hadoop集群的master中用命令運行例子易出現的故障:
1. 錯誤現象:java.lang.OutOfMemoryError: Java heap space.
原因:JVM內存不夠。
解決方法:修改mapred-site.xml中mapred.child.java.opts屬性的值,其默認值是-Xmx200m 可根據需要適當增大 該值。
2. 錯誤現象:could only be replicated to 0 nodes, instead of 1
解決方法:在NameNode上執行命令:hadoop namenode –format重新格式化HDFS,在格式化之前,需要將你 NameNode上所配置的dfs.name.dir這一namenode用來存放NameNode 持久存儲名字空間及事務日志的本地文件系統路徑刪除,同時將各DataNode上的dfs.data.dir的路徑DataNode存放塊數據的本地文件系統路徑的目錄也刪除。
3. 錯誤現象:namenode in safe mode.
原因:hadoop進入安全模式。
解決方法:在shell中執行命令hadoop dfsadmin -safemode leave 使hadoop離開安全模式。
(三)在windows下Eclipse中運行例子易出現的錯誤:
1. 錯誤現象:org.apache.hadoop.security.AccessControlException: Permission denied: user=administrator, access=EXECUTE, inode="job_201111031322_0003":heipark:supergroup:rwx-.
原因:本地用戶administrator(本機windows用戶)想要遠程操作hadoop系統,沒有權限引起的。
解決辦法:
i、如果是測試環境,可以取消hadoop hdfs的用戶權限檢查。打開conf/hdfs-site.xml,找到dfs.permissions屬性修改為false(默認為true)OK了。
ii、修改hadoop location參數,在advanced parameter選項卡中,找到hadoop.job.ugi項,將此項改為啟動hadoop的用戶名即可。
2.錯誤現象:IOException: Cannot run program "chmod": CreateProcess error=2.
原因: 沒有安裝cygwin或 沒有配置環境變量。
解決辦法:安裝並配置環境變量 bin到 path下 重啟 eclipse 問題即可。
3. 錯誤現象: WARN mapred.LocalJobRunner: job_local_0001
java.lang.OutOfMemoryError: java heap space
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:781)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:350)
………..
原因:客戶端程序運行時java虛擬機內存分配不夠
解決辦法:修改run configuration,選擇Arguments選項卡,在VM arguments欄中加入-Xmx1024m,保存即可解決問題。
==================================
windows cygwin環境下,遇到這個錯誤:org.apache.hadoop.security.AccessControlException: Permission denied: user=cyg_server, access=EXECUTE, inode="job_201010161322_0003":heipark:supergroup:rwx------
解決:剛開始還使用“./bin/hadoop dfs -chmod 777 ”,后來發現老是這樣設置麻煩。可以取消hadoop hdfs的用戶權限檢查。打開conf/hdfs-site.xml,找到dfs.permissions屬性修改為false(默認為true)OK了。注意生產環境處於安全考慮不要這么搞。
==================================
window下使用eclipse開發hadoop程序遇到的問題。
現象一:“DFS Locations”無法瀏覽DFS中文件,報錯
Cannot connect to the Map/Reduce location: heipark
Call to localhost/127.0.0.1:9000 failed on local exception: java.io.EOFException
現象二:啟動自己編寫的mapred程序報相同錯誤。
原因:Hadoop服務端版本和eclipse插件版本不一致
解決:倒騰了好幾個版本eclipse和hadoop插件,有的點擊沒反應,不能瀏覽文件系統。最后整理了一下有兩個辦法:
一:自己編譯eclipse plugin(自己嘗試編譯0.21.0版本沒有成功。首選遇到包的依賴問題,接着編譯成功后,eclipse右鍵創建還是沒有響應)
二:我使用0.21.0自帶的eclipse plugin在多個eclipse都不好用,在網上下了一個可以3.3,,3.4,3.5都可以跑的hadoop-0.20.3-dev-eclipse-plugin.jar(http://code.google.com/p/hadoop-eclipse-plugin/downloads/list),但是報上面的錯誤,有網友說是插件和hadoop版本不一致導致的。最后我下載了一個0.20.2版本hadoop,使用自帶的插件在eclipse3.3.2下完美運行。
==================================
Namenode報錯:“jobtracker.info could only be replicated to 0 nodes, instead of 1”
DateNode報錯java.io.IOException: Incompatible namespaceIDs錯誤
原因:由於DateNode一段時間未啟動,再次啟動與NameNode數據不同步導致。
解決一:修改/dfs/data/current/VERSION文件中namespaceID值,保證NameNode和DateNode一致。修改原則:如果你有多個DateNode需要都需要修改,那就修改NameNode;否則就修改NameNode。總之就是最小化修改原則。這樣修改不會刪除數據,推薦。
解決二:刪除有問題datenode的data文件夾,然后format namenode。
參考:http://forum.hadoop.tw/viewtopic.php?f=4&t=43
==================================
在windows eclipse開發環境提交job到遠處Linux hadoop集群,運行mapred報錯“IOException: Cannot run program "chmod": CreateProcess error=2”
原因:安裝cygwin,而且需要設置"cygwin\bin"到環境變量PATH中
==================================
運行hive0.6.0報如下錯誤:
Invalid maximum heap size: -Xmx4096m
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.
修改“Hive-0.6.0/bin/ext/util/execHiveCmd.sh”
HADOOP_HEAPSIZE=4096 為
HADOOP_HEAPSIZE=256
==================================
使用java client運行hive官方《 Getting Started Guide》中apachelog例子報錯:
ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe
hive沒有找到hive-contrib-0.7.0.jar嗎?這個jar明明在lib下,解決辦法如下:
vi hive-default.xml
- <property>
- <name>hive.aux.jars.path</name>
- <value>file:///home/hadoop/hive-0.7.0/lib/hive-contrib-0.7.0.jar</value>
- </property>