在上文http://blog.youkuaiyun.com/dywywh709/article/details/21229075(在eclipse下编译hadoop2.0源码)中将maven工程编译成eclipse项目然后导入eclipse,但是细心的朋友会发现导入elipse后会报出各种各样的错误,通过努力本人解决了报的错误,与大家做一次分享,希望能共同进步。
常见的错误及解决方案列举如下:
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)
我个人认为这个问题可能是由于eclipse不支持跨model的文件引用。
解决办法:大家找到/root/workspace/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf目录下capacity-scheduler.xml文件,将其copy至/root/workspace/hadoop-2.2.0-src/hadoop-tools/hadoop-streaming/dev-support目录下;然后打开/root/workspace/hadoop-2.2.0-src/hadoop-tools/hadoop-streaming目录下的pom.xml文件,找到如下位置:
<directory>${basedir}/../../hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf</directory>
将其修改为:
<directory>${basedir}/hadoop-tools/hadoop-streaming/dev-support</directory>
至此,该问题解决。
2. /hadoop-common/src/test/java/org/apache/hadoop/io/serializer/avro/TestAvroSerialization.java显示没有AvroRecord类,在网上搜索到AvroRecord类放入到同级包中就行了。
http://download.youkuaiyun.com/detail/dywywh709/7039179(此处可以下载该类)
3. org.apache.hadoop.ipc.protobuf包里面缺少两个类TestProtos.java,TestRpcServiceProtos.java.
需要在/hadoop-common/target/generated-test-sources/java/org/apache/hadoop/ipc中找到profobuf拷贝到/hadoop-common/src/test/java中就好了
4. 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
5. /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级别就好。
6. /hadoop-auth/org/apache/hadoop/security/authentication/client/AuthenricatorTestCase.java中显示server.start()和server.stop()错误,还没找到原因所在,待检查~~~(这里不影响编译及调试)
希望能解决大家遇到的一些错误,共同进步。