classname缺失

时间:2015-02-11 05:50:38

标签: java

我的org / 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的父目录。

Write.class在org/myorg

下创建

我使用

运行它

java org.myorg.Write

来自org

的父目录

它说

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

但是我从this link下载了jar。此链接表示存在FSDataOutputStream类。

可能是什么原因?

2 个答案:

答案 0 :(得分:0)

您没有为执行设置类路径 - 您在编译期间设置了它:

视窗:

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文件。

答案 1 :(得分: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中使用,则必须使用;代替: