我是新手第一次编译hadoop源码,期间遇见了许多的坑,网上不少文章给予了我极大帮助,其中这篇文章Hadoop 3.2.1 win10 64位系统 vs2015 编译 - 一字千金 - 博客园给予的帮助是最大的。这篇文章可以说是手把手的讲解了win10 64位系统下编译hadoop的整个过程,不过由于我是新手,在编译的期间还是踩了一些新手会踩的坑,现总结如下:
1、jdk的版本最好选择1.8版。开始不明白为什么网上的相关文章用的都是1.8版,明明有着新版,却放着不用,最后在编译的过程中才发现hadoop的编译会用到javah这个命令,而这个命令在jdk10以后整合进了javac,也就是说新版的jdk不再有javah这个命令,编译到这里时会报错。
2、几乎每一篇文章都说了一个事,就是安装的各个工具路径一定要短,这因为在编译的过程中有些命令的执行会出现非常长的,长到令人发指的路径,这有可能引起windows最大路径长度的异常,而导致编译失败。我这里要强调的是Maven的本地仓库的目录也应该尽量短,我在编译的过程中就遇见由于这个路径稍微长了一点引起了编译失败,所以一定要重新设置Maven的本地仓库。这个是在Maven的安装目录下,conf目录下的settings.xml中进行设置。
在这个位置加上
3、一定要添加maven的云仓库的镜像,这样可以最大限度的屏蔽掉因网络不稳定导致依赖的jar包下载不下来的情况。这个也是在Maven的安装目录下,conf目录下的settings.xml中进行设置。
这里注释掉其他的镜像,然后把阿里云仓库镜像加上 。
4、在安装protocol buffer工具的时候,需要用maven工具将它编译、打包,并放到maven的本地仓库,如果用的是2.5.0版,在它的pom.xml中
箭头标记的位置有可能设置的是低版本的jdk,所以这里要对应我们的jdk版本,也就是1.8 。
5、在安装protocol buffer工具(2.5.0版)的时候,需要用maven工具将它编译、打包,并放到maven的本地仓库,但是在mvn install 命令包含了测试、编译、打包、发布几个过程,而在test阶段的时候有可能出现关于maven-surefire-plugin的测试错误,这个可以忽略掉这个插件的测试
注释掉
6、几乎所有文章都说了
(1) Window工具编译
D:hadoophadoop-3.2.1-srchadoop-common-projecthadoop-commonsrcmainwinutils
(2)hadoop.dll编译
D:hadoophadoop-3.2.1-srchadoop-common-projecthadoop-commonsrcmainnative
这个两个文件的编译,但是这两个文件就像一字千金的文章里说的那样,用vs编译时,一堆的报错,开始我没看明白一字千金文章的意思,总以为不编译过不行,花了不少时间查问题,但实际上这里我们如果用的是高于vs10的版本,只需升个级就好,只要用maven编译的时候,使用vs带的x64 Native tools command prompt窗口就好。
7、在开始编译hadoop时,编译的命令中不要带上clean,因为出现“hadoop-hdfs-native-client :RelWithDebInfo编译错误”出现这个错误的时候,我们按照一字千斤的方法要新建文件夹,clean选项是会删除掉我们新建的文件夹的,所以这个选项会导致这里出现编译错误。



