这是楼主的处女贴,内心禁不住激动一番~~~~言归正传,首先解释一下为什么要编译源码。编译之后的hadoop才能被jvm执行,才能被安装。编译之后,可以查看函数的实现,否则只有自己去查看源码了,而且编译之后可以根据自己的需要去改变hadoop的某些实现机制,这就是开源的好处。

1.下载源码http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.6/

2.编译环境准备:
* JDK 1.7(楼主试过JDK1.8,编译会报错)
* Maven 3.1.1 
* Findbugs 1.3.9
* ProtocolBuffer 2.5.0
* CMake 2.8.5
* Zlib devel (if compiling native code)
* openssl devel ( ubuntu直接运行sudo apt-get install openssl-devel会报错,要分两步安装:a. sudo apt-get install openssl,b. sudo apt-get install libssl-dev)
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)


   环境安装好之后,保持网络畅通,运行  mvn package -Pdist -DskipTests -Dtar 或者 mvn package -Pdist,native,docs -DskipTests -Dtar(编译之后会生成doc)。在这里告诉大家一个好习惯,每次安装软件的时候,在解压之后的文件夹里面一般会有BUILD.txt或者READ.txt文件,告诉你怎么安装这个软件,只要按照文档的做,一般不会出什么问题。当然也有意外,楼主编译hadoop2.6.0-src时,jdk用的是1.8(文档上说jdk1.6+),maven用的是3.0.5(sudo apt-get install maven安装的是这个版本),理论上应该可以通过编译,因为文档上要求的是maven3.0+。所以大家要引起注意,有的时候搭一个环境,相应软件版本问题过高过低也会导致失败。这里说一个插曲,楼主在公司搭后台开发环境时用的是jdk1.8.结果也报错,浪费了大概半个小时的时间。大家能不犯错就尽量不要犯错,千万不要小看这个问题,有些复杂的编译,build一次半个小时或者一个小时那是再家常不过的事情了,所以不要拿自己的宝贵生命开玩笑(伟人说的,浪费时间就是慢性自杀)。言归正传,如果环境准备没有问题,第一次buid至少一个多小时,大家可以去撸一把了。如果还是报错,要么是软件版本不对,要么是环境变量没有设置好。build success之后,会在hadoop2.6.0-src目录下生成很多东西,比如说在hadoop-dist目录下会生成一个target目录,该目录里面包含一个hadoop-2.6.0目录,这个东东是干嘛的呢,楼主和在官网上下载的hadoop-2.6.0做过diff,几乎没有说明差异。hadoop-2.6.0可以用来搭建伪分布式系统。


3.源码导入eclipse(不编译源码也可以将源码导入)
  cd hadoop-2.6.0-src/hadoop-maven-plugins
  mvn install

  cd hadoop-2.6.0-src
  mvn eclipse:eclipse -DskipTests(这步命令运行时间较长)

然后,打开eclipse,[File] > [Import] > [Existing Projects into Workspace],目录选择hadoop-2.6.0-src。导入之后会报错接。

代码导入之后会报这个错:Project ‘hadoop-streaming’ is missing required source folder: ‘/.../...../hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf’,网上的一些解决方法都不靠谱,楼主的解决方法如下:

1.找到hadoop-streaming这个project,然后右键-properties-java build path-source,删除报错的project;

2.重新link所需的source:点击右边的link source,然后选择/../../hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf,名字自己取一个。



hadoop native编译 hadoop源码编译的作用_hadoop native编译