【问题标题】:How do you get WordCount.java to compile on Cloudera 4?如何让 WordCount.java 在 Cloudera 4 上编译?
【发布时间】:2012-08-08 07:23:45
【问题描述】:
我正在尝试在 Cloudera 4 的 linux (CentOS) 安装上编译一个简单的 WordCount.java map-reduce 示例。当我引用任何 hadoop 类时,我总是遇到编译器错误,但我无法弄清楚我需要将 /usr/lib/hadoop 下的数百个 jar 添加到我的类路径中才能编译。任何帮助将不胜感激!我最想要的是一个用于字数统计的 java 文件(以防万一我发现的文件由于某种原因不好)以及用于编译和运行它的相关命令。
我正在尝试仅使用 javac 而不是 Eclipse 来执行此操作。无论哪种方式,我的主要问题是 Cloudera 4 安装中的 Hadoop 库到底是什么,我需要包含这些库才能编译经典的 WordCount 示例。基本上,我需要将 Java MapReduce API 类(Mapper、Reducer 等)放在我的类路径中。
【问题讨论】:
标签:
java
hadoop
javac
cloudera
word-count
【解决方案1】:
或者你可以导出环境:
export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
并使用以下命令:
$ bin/hadoop com.sun.tools.javac.Main WordCount.java
$ jar cf wc.jar WordCount*.class
【解决方案2】:
如果您正在运行 Cloudera CDH4 虚拟机,那么以下内容应该可以帮助您运行:
javac -classpath /usr/lib/hadoop/hadoop-common-2.0.0-cdh4.0.0.jar:/usr/lib/hadoop/client/hadoop-mapreduce-client-core-2.0.0-cdh4.0.0.jar -d wordcount_classes WordCount.java
【解决方案3】:
我有一个构建我的 hadoop 类的脚本。试试:
#!/bin/bash
program=`echo $1 | awk -F "." '{print $1}'`
if [ ! -d "${program}_classes" ]
then mkdir ${program}_classes/;
fi
javac -classpath /usr/lib/hadoop/hadoop-common-2.0.0-cdh4.0.1.jar:/usr/lib/hadoop/client/h\
adoop-mapreduce-client-core-2.0.0-cdh4.0.1.jar -d ${program}_classes/ $1
jar -cvf ${program}.jar -C ${program}_classes/ .;
你可能错过了关键罐子:
/usr/lib/hadoop/hadoop-common-2.0.0-cdh4.0.1.jar
和
/usr/lib/hadoop/client/hadoop-mapreduce-client-core-2.0.0-cdh4.0.1.jar
【解决方案4】:
如果您使用的是 Eclipse,请添加 Hadoop 包。您可以从 java2s 或任何类似站点获得它。我不能说不知道你到目前为止所做的事情。