Java 命令行模式下编译 MapReduce 程序

时间:2022-03-29 14:17:45

不使用 eclipse 这些工具,直接使用 java 命令在命令行下编译 mapreduce 程序。


首先需要设置CLASSPATH环境变量:



将/root/hadoop/hadoop-0.20.1/hadoop-0.20.1/hadoop-0.20.1-core.jar和lib下的commons-cli-1.2.jar添加进入环境变量,


export CLASSPATH=.:$CLASSPATH:/root/hadoop/hadoop-0.20.1/hadoop-0.20.1/hadoop-0.20.1-core.jar:/root/hadoop/hadoop-0.20.1/hadoop-0.20.1/lib/commons-cli-1.2.jar

这里必须是.jar的路径,而不是上层目录的路径,否则javac编译时找不到相应类,

环境变量设置建议:

(1)不要将.写在环境变量里;


(2)用脚本来控制环境变量 脚本中环境变量的有效范围是脚本中的后续命令


比如在脚本debug.sh中export CLASSPATH=*****,然后CLASSPATH就对后续的命令有效,脚本执行完毕后CLASSPATH还是原来的值。


实例脚本
用途:编译和运行Hadoop应用程序
脚本内容:


export CLASSPATH=$CLASSPATH:$HADOOP_HOME/hadoop-0.20.1-core.jar:$HADOOP_HOME/lib/commons-cli-1.2.jar:$HADOOP_HOME/lib/commons-logging-1.0.4.jar


javac WordCountAnalyzer.java  编译时需要相应的jar包


java  WordCountAnalyzer       运行时也需要相应的jar包



注意:编译时需要jar包,运行时也需要jar包,假如将java  WordCountAnalyzer 命令放在脚本外运行,则因为CLASSPATH又变回原来的值,则运行会提示错误。
这里的CLASSPATH变量的值的作用域是export 后面的命令


此外我们在编写java程序时,包名最好规范命名,
例如commons-cli-1.2.jar下的包应该命名为
org.apache.commons.cli
org.apache.commons.cli.*等,
这样方便在程序中找到某一个类在哪个jar当中。