Linux下, Hadoop2.6.0源代码导入Eclipse

来源:互联网 发布:淘宝客好赚钱吗 编辑:程序博客网 时间:2024/05/22 13:37

环境:Linux: Ubuntu14.04
Java: JDK1.7
Eclipse: eclipse-standard-kepler-SR2-linux-gtk-x86_64.tar.gz
Hadoop:version-2.6.0
Maven: 3.0.5

1.安装JDK,Eclipse,Maven请自行百度,下载Hadoop2.6.0源代码的地址为
http://apache.osuosl.org/hadoop/common/hadoop-2.6.0/hadoop-2.6.0-src.tar.gz
下载完后是这样:
这里写图片描述

2.解压hadoop-2.6.0-src.tar.gz
解压命令:tar zvxf hadoop-2.6.0-src.tar.gz
解压完成:
这里写图片描述

3.解压完成后,进入根目录下的hadoop-maven-plugins目录: cd hadoop-2.6.0-src/hadoop-maven-plugins
运行命令: mvn install
这里写图片描述
……
……
这里写图片描述
4.退回到根目录:cd ../
运行命令生成Eclipse工程文件:mvn eclipse:eclipse -DskipTests (这里参数-DskipTests是指忽略工程里的测试test文件)
这里写图片描述
(因为之前运行过上述两个命令,所以时间很短,第一次的话会比较耗时)

5.此时工程文件就编译成功,开始导入Eclipse了
打开Eclipse,选择File—>>>import—>>>General—>>>Existing Projects into Workspace->选择源代码根目录
这里写图片描述
—>>>finish—>>>导入完成

6.导入完成后,最大的问题来了,出现了很多的错误。目前可以在网上找到5种错误的解决方法(会在最后贴出,本文也是借鉴这些方法),下面说说我遇到的问题和解决方法
我的一共有59个错误,分为三类
错误1:Hadoop-streaming错误(hadoop-streaming里面的build path有问题)
这里写图片描述
这里写图片描述
解决方法:(解决后剩下56个错误)
右键出错项目—>>>Properties
这里写图片描述
Java Build Path—>>>Source—>>>选定错误项—>>>点击Remove—>>>OK
这里写图片描述
错误2:缺少AvroRecord类
这里写图片描述
这里写图片描述
解决方法:(解决后剩下53个错误)
从网上下载AvroRecord.java文件:http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-common/2.6.0/org/apache/hadoop/io/serializer/avro/AvroRecord.java/
下载完后复制到包org.apache.hadoop.io.serializer.avro下面,复制后为:
这里写图片描述
错误3:org.apache.hadoop.ipc.protobuf包下缺少TestProtos.java 和 TestRpcServiceProtos.java 文件
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
解决方法:(解决后没有错误,导入成功)
从网上下载这两个文件:
TestProtos.java: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-common/2.6.0/org/apache/hadoop/ipc/protobuf/TestProtos.java/
TestRpcServiceProtos.java: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-common/2.6.0/org/apache/hadoop/ipc/protobuf/TestRpcServiceProtos.java/
下载完后复制到包org.apache.hadoop.ipc.protobuf包下面,复制后为:
这里写图片描述
可能错误4:如果还有错误(eg. 我之前遇到过Access restriction的错误),可能是由于Eclipse的强检查原则导致的错误
解决方法:打开Window—>>>Preference—>>>Java—>>> Compiler—>>>Errors/Warnings—>>>Deprecated and restricted API—>>>将Forbidden reference (access rules)的error级别调整为warning级别:
这里写图片描述

6.导入成功

这里写图片描述

~~~~~~~~~~~~~~~~~~~~~~~~~我是分界线~~~~~~~~~~~~~~~~~~~~~~~~~~~
网上找到了5中问题解决方法:http://www.bigdatas.cn/thread-62995-1-1.html
Error#1. hadoop-streaming里面的build path有问题,显示/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中,在Oracle Jdk中没找到,需要下载一个。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里面显示
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
失败,这是由于Eclipse的强检查原则,打开Java -> Compiler -> Errors/Warnings and under “Deprecated and restricted API” change the setting 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;

Error#6. /hadoop-auth/org/apache/hadoop/security/authentication/client/AuthenricatorTestCase.java中显示server.start()和server.stop()错误,还没找到原因所在,待检查~~~

0 0