2015-02-11 74 views
0

我下有機/ MYORG我的Java文件類名丟失

package org.myorg; 
    import java.io.*; 
    import java.util.*; 
    import java.net.*; 
    import org.apache.hadoop.fs.*; 
    import org.apache.hadoop.conf.*; 
    import org.apache.hadoop.io.*; 
    import org.apache.hadoop.mapred.*; 
    import org.apache.hadoop.util.*; 

    public class Write{ 
    public static void main (String [] args) throws Exception{ 
      try{ 
        Path pt=new Path("hdfs:localhost:8020/user/jfor/out/abc"); 
        FileSystem fs = FileSystem.get(new Configuration()); 
        BufferedWriter br=new BufferedWriter(new OutputStreamWriter(fs.create(pt,true))); 
               // TO append data to a file, use fs.append(Path f) 
        String line; 
        line="Disha Dishu Daasha"; 
        System.out.println(line); 
        br.write(line); 
        br.close(); 
      }catch(Exception e){ 
        System.out.println("File not found"); 
      } 
    } 
} 

我使用

javac -classpath hadoop-0.20.1-dev-core.jar org/myorg/Write.java 

org父目錄編譯它。下org/myorg

創建

Write.class我運行它使用

從Java的org

父目錄org.myorg.Write

它說

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataOutputStream 
    at java.lang.Class.getDeclaredMethods0(Native Method) 

但我下載的jar從this link。此鏈接表示FSDataOutputStream類存在。

可能是什麼原因?

回答

0

您沒有設置CLASSPATH執行 - 你有它的編譯過程中設置:

的Windows:

java -cp .;hadoop-0.20.1-dev-core.jar org.myorg.Write 

UNIX:

java -cp .:hadoop-0.20.1-dev-core.jar org.myorg.Write 

你必須指定類路徑(-cp)包含當前目錄,以及hadoop jar文件。

+0

我從'父目錄運行org'它說:「找不到文件「Unix系統 – 2015-02-11 05:58:58

0

你必須給出確切的路徑,其中jar存在

java -cp .:give_the_path_to_the_jar org.myorg.Write 

例如,如果它出現在我的桌面

java -cp .:/home/neeraj/Desktop/hadoop-0.20.1-dev-core.jar org.myorg.Write 

.代表當前目錄

注:這些上面的例子是Linux(Ubuntu的),如果你需要在Windows中使用比你必須使用;代替:

+0

如果我在桌面上怎麼辦?我需要給全路徑嗎? – 2015-02-11 06:14:12

+0

不,那麼你不必給它,如果'Java class file'和jar都存在於同一個位置,並且你從那裏調用'java'命令,那麼就不需要給出完整路徑 – 2015-02-11 06:25:05

+0

然後錯誤 – 2015-02-11 06:31:43