2014-12-04 35 views
9

當我嘗試編譯我的程序在Hadoop中使用此命令的Java:com.sun.tools.javac.Main沒有找到想要編譯的Hadoop程序

bin/hadoop com.sun.tools.javac.Main WordCounter.java 

從Hadoop的文件夾時,它說

Error: Could not find or load main class com.sun.tools.javac.Main 

我看過類似的線程,人們建議檢查JAVA_HOME是否正確說明。因此,在etc/hadoop/hadoop-env.sh我加入這一行

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 

然後檢查是否tools.pack/usr/lib/jvm/java-7-openjdk-amd64/lib正確解包,它是。然後我試圖javac -version這給

javac 1.7.0_65 

我試圖重新安裝Java,但它並沒有解決問題。

+0

爲什麼會'tools.jar'解壓,而不是簡單地添加到類路徑?你的類路徑是什麼? – 2014-12-04 16:44:36

+0

tools.pack,對不起,因爲混淆 – 2014-12-04 16:46:44

+0

echo $ CLASSPATH並沒有提供任何東西,我試圖導出CLASSPATH =/usr/local/java/tools.jar但它沒有解決問題 – 2014-12-04 16:50:37

回答

0

該錯誤表示您不使用JDK啓動Hadoop。 JRE(純運行時)與JDK之間的主要區別在於Java編譯器javac。要查看您是否擁有Java編譯器,您需要檢查兩個位置:$JAVA_HOME/bin文件夾中應該有一個javac,並且必須有一個文件$JAVA_HOME/lib/tools.jar

在你的情況下,第一個(啓動編譯器的二進制文件)可能會丟失,但你絕對需要tools.jar

你說你有一個tools.pack但我之前沒有聽說過這個。使用包管理器搜索openjdk,然後在結果列表中找到一個包含jdk的包。在我的系統上,這將是openjdk-7-jdk。安裝這個軟件包,錯誤應該消失。

+1

tools.jar存在以及javac – 2014-12-05 12:33:41

+0

還有當我搜索時安裝的openjdk-7-jdk – 2014-12-05 12:34:18

+0

在這種情況下,您的設置被忽略。如果'bin/hadoop'是一個腳本,那麼嘗試'bash -x bin/hadoop ...'來查看哪些命令被執行以及設置了哪些變量。要將輸出重定向到一個文件,使用'|&tee hadoop.log'。然後你可以在'hadoop.log'中搜索'hadoop-env.sh'和'JAVA_HOME'。 – 2014-12-05 12:56:48

10

嘗試設置HADOOP_CLASSPATH環境變量

export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar 
+1

這對我有用。在hadoop的設置中沒有很好的記錄。 – Zambonilli 2015-05-19 15:21:58