hadoop文档的mapreduce第一章介绍了WordCount实例的编译和运行等,其中编译的时候用的是这样的语句。
$ bin/hadoop com.sun.tools.javac.Main WordCount.java
一直搞不懂com.sun.tools.javac.Main是啥,后来查看文档原来前面还有这样的描述
Assuming environment variables are set as follows:
export JAVA_HOME=/usr/java/default export PATH=${JAVA_HOME}/bin:${PATH} export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
CompileWordCount.javaand create a jar:
$ bin/hadoop com.sun.tools.javac.Main WordCount.java $ jar cf wc.jar WordCount*.class然后我找到tools.jar解压,果然里头目录结构有com/sun/tools/javac/Main.class,所以这条命令应该是hadoop指令会在classpath中找com.sun.tools.javac.Main类,而其搜索路径就包含了tools.jar,所以能找到。 那这个类的作用呢跟JAVA_HOME下的bin目录中的javac有什么区别呢,为什么我们平时很多时候用的是javac命令,而现在用hadoop com.sun.tools.javac.Main呢,我想这两者都是可以正常编译java文件的,javac程序应该是com.sun.tools.javac下的class文件打包而成的可执行程序,作用是一样的,只是一个是由javac指令来执行,另一个是由hadoop调用com.sun.tools.javac.Main.class文件来执行,而我们在配置hadoop的过程中已经为hadoop环境配置好了环境变量,所以用hadoop指令会方便些,不然如果用javac命令的话,还需要针对其另外配置。 目前是这些浅薄的理解,可能有错,以后再修正。