1. 程式人生 > >hadoop 叢集常見錯誤解決辦法

hadoop 叢集常見錯誤解決辦法

==================================

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。

==================================

在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 

  1. <property>
  2. <name>hive.aux.jars.path</name>
  3. <value>file:///home/hadoop/hive-0.7.0/lib/hive-contrib-0.7.0.jar</value>
  4. </property>
再次啟動Hive Thrift Server,OK了。