环境: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()错误,还没找到原因所在,待检查~~~