企业级Hadoop 2.x入门系列之三将Hadoop 2.x源码导入Eclipse中

来源:互联网 发布:人工智能要从娃娃抓起 编辑:程序博客网 时间:2024/05/22 12:43

2.5 Eclipse导入源码

Step1:使用Maven构建Eclipse项目

官方说明:

Importing projects to eclipse

 

When you import the project to eclipse, installhadoop-maven-plugins at first.

  $ cd hadoop-maven-plugins

  $ mvninstall

Then, generate eclipse project files.

  $ mvneclipse:eclipse -DskipTests

At last, import to eclipse by specifying the rootdirectory of the project via

[File] > [Import] > [Existing Projects intoWorkspace].

 

编译步骤:

(1)  进入源码根目录hadoop-src-2.2.0

mvncompile –Pnative    --编译源码

生成 hadoop-maven-plugins 目录,

(2)  安装hadoop-maven-plugins插件

进入源码根目录下的maven-plugins目录:

cd /workDir/Hadoop-2.2.0-src/hadoop-maven-plugins/

执行:

mvn install

(3)  生成Eclipse项目文件

执行完成后退到上级目录

cd ..    --(回到Hadoop-2.2.0-src目录)

执行命令:

mvn eclipse:eclipse –DskipTests

生成Eclipse工程文件

Step2:通过远程工具操作Eclipse

使用Xmanager远程图形工具打开Linux中的Eclipse

cd /workDir/eclipse

./eclipse

这样就打开Eclipse了

执行:[File] > [Import] > [Existing Projects into Workspace] > sourceroot选择代码根目录


Eclipse工程文件里hadoop-streaming 有一个source code外部引用路径不正确,手动修正(capacity-scheduler.xml)。

配置 Eclipse M2_REPO 变量

     Window/Preference/Java/Build Path, M2_REPO默认路径为     

        /home/<usename>/.m2/repository。

 

错误解决:

     摘录于http://www.cnblogs.com/zhengcong/p/3592490.html

Error#1. hadoop-streaming里面的buildpath有问题,显示:

/root/workspace/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf(missing)

解决办法,remove掉引用就好。

 

Error#2.hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSClientFailover.java中报

sun.net.spi.nameservice.NameService错误,这是一个需要import的包,存在于openjdk中,在OracleJdk中没找到,需要下载一个。NameService是一个接口,在网上找一个NameService放到该包中就好。

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/sun/net/spi/nameservice/NameService.java#NameService

 

Error#3. /hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineEditsViewer/XmlEditsVisitor.java里面显示: 

importcom.sun.org.apache.xml.internal.serialize.OutputFormat; 

importcom.sun.org.apache.xml.internal.serialize.XMLSerializer; 

失败,这是由于Eclipse的强检查原则,打开Java -> Compiler ->Errors/Warnings and under "Deprecated and restricted API" change thesetting of "Forbidden reference (access rules)" 将error级别调整到warning级别就好。

 

Error#4. /hadoop-common/src/test/java/org/apache/hadoop/io/serializer/avro/TestAvroSerialization.java

显示没有AvroRecord类,在网上搜索到AvroRecord类放入到同级包中就行了。  

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-common/2.2.0/org/apache/hadoop/io/serializer/avro/AvroRecord.java#AvroRecord

 

Error#5. org.apache.hadoop.ipc.protobuf包是空的,需要在/hadoop-common/target/generated-sources/java中找到profobuf拷贝到/hadoop-common/src/test/java中就好了. 同时包里面还缺少了以下三个引用,在GrepCode上找一下,把hadoop-common2.2.0的相应文件下下来导入。

org.apache.hadoop.ipc.protobuf.TestProtos.EchoRequestProto;

org.apache.hadoop.ipc.protobuf.TestProtos.EchoResponseProto;

org.apache.hadoop.ipc.protobuf.TestRpcServiceProtos.TestProtobufRpcProto;

0 0