编译 Hadoop 2.2.0 作业?

3

看起来所有的例子都是针对旧版本构建的。

我该如何在Ubuntu上编译我的Java程序,以便它引用hadoop-2.2.0库?

我应该包含哪些jar文件?

命令是什么? 类似于 -

javac -classpath libraries wordcount.java

谢谢。
6个回答

11

对于 Linux 设备来说,最简单的解决方案是:

javac -classpath `yarn classpath` -d . WordCount.java

或:

export CLASSPATH=`yarn classpath`
javac -classpath $CLASSPATH -d . WordCount.java

10

我找到了以下内容:

javac -classpath $HADOOP_HOME/share/hadoop/common/hadoop-common-2.2.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.2.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar -d wordcount_classes myWordCount.java

这使我能够编译Wordcount示例(或在此情况下,我的副本称为myWordCount)。


如果我只使用这些库,就会出现“java.lang.ClassNotFoundException: org.apache.hadoop.util.PlatformName”的错误。有什么建议吗? - Pedro Dusso
1
这个可以运行。我正在使用Hadoop 2.4.1。只是更改了jar版本号码。 - navin

3
Hadoop提供了一个名为"hadoop classpath"的命令,可为您提供必要的类路径。 例如:
hadoop classpath /etc/hadoop/conf:/usr/lib/hadoop/lib/:/usr/lib/hadoop/.//:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/:/usr/lib/hadoop-hdfs/.//:/usr/lib/hadoop-yarn/lib/:/usr/lib/hadoop-yarn/.//:/usr/lib/hadoop-mapreduce/lib/:/usr/lib/hadoop-mapreduce/.// 因此,如果您想要编译,可以使用以下方式:
javac -classpath $(hadoop classpath) -d . WordCount.java

0

我在使用Hadoop示例jar时遇到了一些问题。许多视频/教程/博客中的信息都是基于旧版本的。

当我们编译这些示例或编写任何使用hadoop包的MapReduce程序时(即在IDE中导入jar /添加对外部jar的引用-类似于在MS Visual Studio中添加对.dll的引用),IDE将负责正确地调用每个类的javac。

现在,对于手动编译任何类,例如WordCount.java,我们需要告诉javac我们的类依赖于哪些jar。我按照过时的视频进行操作,但其中共享了一个信息,即在.bashrc中设置一个变量,引用所有与Hadoop相关的jar文件,然后在javac -classpath $VARIABLE filename.java中使用它。

例如,我将名称设置为$HADOOP_CLASSPATH,值如下所示(我在Mac OS X上)

/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/:/usr/local/hadoop/share/hadoop/common/:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/:/usr/local/hadoop/share/hadoop/hdfs/:/usr/local/hadoop/share/hadoop/yarn/lib/:/usr/local/hadoop/share/hadoop/yarn/:/usr/local/hadoop/share/hadoop/mapreduce/lib/:/usr/local/hadoop/share/hadoop/mapreduce/:/contrib/capacity-scheduler/.jar:/usr/local/hadoop/share/hadoop/yarn/:/usr/local/hadoop/share/hadoop/yarn/lib/*

有了这个变量,我就可以成功编译类了。 "javac -classpath $HADOOP_CLASSPATH WordCount.java "


0

你需要安装Cygin,然后在那里运行你的Hadoop示例,同时你也可以使用Eclipse配置你的Hadoop


0
运行命令:"yarn classpath",以查看目录列表。当我将此列表用作javac的-classpath选项时,我的Java程序可以编译。
我正在运行HortonWorks v2.0,Apache Hadoop 2.2.0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接