2015-02-11 48 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