2010-09-26 85 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