不使用 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)不要将.写在环境变量里;
比如在脚本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
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当中。