看起来所有的例子都是针对旧版本构建的。
我该如何在Ubuntu上编译我的Java程序,以便它引用hadoop-2.2.0库?
我应该包含哪些jar文件?
命令是什么? 类似于 -
javac -classpath libraries wordcount.java
谢谢。
看起来所有的例子都是针对旧版本构建的。
我该如何在Ubuntu上编译我的Java程序,以便它引用hadoop-2.2.0库?
我应该包含哪些jar文件?
命令是什么? 类似于 -
javac -classpath libraries wordcount.java
对于 Linux 设备来说,最简单的解决方案是:
javac -classpath `yarn classpath` -d . WordCount.java
或:
export CLASSPATH=`yarn classpath`
javac -classpath $CLASSPATH -d . WordCount.java
我找到了以下内容:
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)。
我在使用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 "
你需要安装Cygin,然后在那里运行你的Hadoop示例,同时你也可以使用Eclipse配置你的Hadoop