简体   繁体   English

编译Hadoop 2.2.0工作?

[英]Compile Hadoop 2.2.0 job?

It seems that all of the examples are constructed with older versions in mind. 似乎所有示例都是在考虑旧版本的情况下构建的。

How do I compile my java program on Ubuntu such that it will refer to hadoop-2.2.0 libraries? 如何在Ubuntu上编译我的java程序,以便它将引用hadoop-2.2.0库?

Where are the jar files that I am supposed to include? 我应该包含哪些jar文件?

What is the command? 命令是什么? Is it like - 是不是 -

javac -classpath libraries wordcount.java

Thank you. 谢谢。

The simplest solution for Linux machines would be: Linux机器最简单的解决方案是:

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

Or: 要么:

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

I found the following: 我找到了以下内容:

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

This allowed me to compile the Wordcount example (or in this case a copy of mine called myWordCount). 这允许我编译Wordcount示例(或者在本例中是我的一个名为myWordCount的副本)。

Hadoop has a command "hadoop classpath" that supplies you with the necessary classpath. Hadoop有一个命令“hadoop classpath”,它为您提供必要的类路径。 ie

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/.// 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 /.//

So if you wanna compile you can use it this way.. 所以,如果你想编译,你可以这样使用它..

javac -classpath $(hadoop classpath) -d . javac -classpath $(hadoop classpath)-d。 WordCount.java WordCount.java

你必须安装Cygin,你可以运行你的hadoop示例,你也可以用eclipse配置你的hadoop

Run the command: "yarn classpath" to see a list of directories. 运行命令:“yarn classpath”以查看目录列表。 When I use this list as my -classpath option for javac, my Java program compiles. 当我使用这个列表作为javac的-classpath选项时,我的Java程序编译。

I am running HortonWorks v2.0, Apache Hadoop 2.2.0. 我正在运行HortonWorks v2.0,Apache Hadoop 2.2.0。

I'm having bumpy ride with Hadoop Example jars too. 我也在使用Hadoop示例罐子。 Information in many videos/tutorials/blogs is based on older version. 许多视频/教程/博客中的信息都基于旧版本。

When we compile these examples or write any of our own MapReduce program, that is going to use hadoop packages (ie import jar in IDE/add reference to external jars - akin to Add reference to .dll in MS Visual Studio), and IDE will take care of correctly calling javac for each class. 当我们编译这些示例或编写任何我们自己的MapReduce程序时,它将使用hadoop包(即在IDE中导入jar /添加对外部jar的引用 - 类似于在MS Visual Studio中添加对.dll的引用),IDE将负责为每个班级正确调用javac。

Now for manually compiling any class eg WordCount.java, we need to tell javac which all jars our class is dependent on. 现在要手动编译任何类,例如WordCount.java,我们需要告诉javac我们的类所依赖的所有jar。 I followed outdated videos but that shared one information ie to set a variable in .bashrc, having reference to all Hadoop related jar files and then use that in javac -classpath $VARIABLE filename.java. 我按照过时的视频,但共享一个信息,即在.bashrc中设置变量,引用所有Hadoop相关的jar文件,然后在javac -classpath $ VARIABLE filename.java中使用它。

eg I'm using name as $HADOOP_CLASSPATH and values as shown here (I'm on Mac OS X) 例如,我使用的名称为$ 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/* / 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 /纱/ lib目录/ *

with this variable, I could compile class successfully. 使用此变量,我可以成功编译类。 "javac -classpath $HADOOP_CLASSPATH WordCount.java " “javac -classpath $ HADOOP_CLASSPATH WordCount.java”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM