2010-09-26 87 views
15

我在筆記本電腦上設置了Hadoop,併成功運行了安裝指南中給出的示例程序。但是,我無法運行程序。如何運行Hadoop程序?

[email protected]:~/hadoop/ch2$ hadoop MaxTemperature input/ncdc/sample.txt output 
Exception in thread "main" java.lang.NoClassDefFoundError: MaxTemperature 
Caused by: java.lang.ClassNotFoundException: MaxTemperature 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: MaxTemperature. Program will exit. 

書說,我們應當以書面形式

[email protected]:~/hadoop/ch2$ export HADOOP_CLASSPATH=build/classes 

的主類是在我執行MaxTemperature.java文件中定義的一組Hadoop的類路徑。我們如何設置Hadoop類路徑?我們必須爲所有程序執行還是隻執行一次?我應該在哪裏放置輸入文件夾。我的代碼位於/ home/rohit/hadoop/ch2,而我的Hadoop安裝位於/ home/hadoop。

回答

8

您應該將應用程序打包到JAR文件中,這比使用classpath文件夾更容易且更容易出錯。

就你而言,你還必須編譯.java文件。你說它是MaxTemparature.java,但是在運行它之前還必須有一個MaxTemperature.class。

+0

這本書我是指沒有說,我們應該打包在一個jar文件中的文件,方便分發通過簇。但是,爲了簡單起見,他們在開始時使用單個文件。 – rohitmishra 2010-09-27 19:12:54

6

這裏是在3個步驟的ansewer:

1:

javac -verbose -classpath C:\\hadoop\\hadoop-0.19.2-core.jar MaxTemperature*.java -d build/classes 

2:

put *.class in build/classes 

3:

export HADOOP_CLASSPATH=${HADOOP_HOME}/path/to/build/classes 

(你必須創建構建/ classes目錄)

問候 瓦利德

+1

+1步驟說明 – Shekhar 2012-02-21 15:41:55

1

後,你做你的類的JAR文件:

hadoop jar MaxTemperature.jar MaxTemperature 

basicly:

hadoop jar jarfile main [args] 
6

會通Hadoop的書時,我發現這個問題,以及( O'Reilly出版)。我通過在配置目錄中的hadoop-env.sh文件中設置HADOOP_CLASSPATH變量來修復它。

6
  1. 首先編譯Java文件由瓦利德所講述:

    javac -classpath path-to-hadoop-0.19.2-core.jar .java-files -d folder-to-contain-classes 
    
  2. 創建應用程序類的jar文件:

    jar cf filename.jar *.classes 
    

    在任何一種情況,無論您是出口將類轉換爲jar文件或使用特定的文件夾來存儲類文件,則應定義HADOOP_CLASSPATH指向該特定的cla ss文件或包含類文件的文件夾。因此,在運行Hadoop命令時,它應該知道在哪裏查找指定的主類。

  3. 設置HADOOP_CLASSPATH

    export HADOOP_CLASSPATH=path-to-filename.jar 
    

    export HADOOP_CLASSPATH=path-to-folder-containing-classes 
    
  4. 運行使用Hadoop命令:

    hadoop main-class args 
    
2

你不一定需要一個jar文件,但沒有喲你把MaxTemperature放在一個包裏?

如果是這樣,說你MaxTemperature.class文件是yourdir/bin/yourpackage/,所有你需要做的是:

export HADOOP_CLASSPATH=yourdir/bin 
hadoop yourpackage.MaxTemperature 
+0

謝謝你的清晰答案 – Vor 2013-04-07 21:54:57