开源代码的编译与打包
Updated:
Contents
本文以hadoop-yarn为例,介绍从HortonWorks的hadoop源代码编译到重新打包成RPM的过程。
Hortonworks源代码下载
- 使用git下载源代码:
- Hortonworks hadoop官方github地址 https://github.com/hortonworks/hadoop-release.git
- 使用
git clone <url>
下载项目到本地,使用git tag
列出所有发行版本,使用git checkout <tag>
切换到目标版本。
准备编译环境
- 安装building.txt列出的所有依赖包,例如编译hadoop依赖的包如下:
Requirements:
- Unix System
- JDK 1.7+
- Maven 3.0 or later
- Findbugs 1.3.9 (if running findbugs)
- ProtocolBuffer 2.5.0
- CMake 2.6 or newer (if compiling native code), must be 3.0 or newer on Mac
- Zlib devel (if compiling native code)
- openssl devel ( if compiling native hadoop-pipes and to get the best HDFS encryption performance )
- Jansson C XML parsing library ( if compiling libwebhdfs )
- Linux FUSE (Filesystem in Userspace) version 2.6 or above ( if compiling fuse_dfs )
- Internet connection for first build (to fetch all Maven and Hadoop dependencies)
源代码编译
一般使用maven进行编译,最后压缩为tar.gz包
使用maven进行编译与打包,主要使用maven package进行打包
Maven build goals:
- Clean : mvn clean
- Compile : mvn compile [-Pnative]
- Run tests : mvn test [-Pnative]
- Create JAR : mvn package
- Run findbugs : mvn compile findbugs:findbugs
- Run checkstyle : mvn compile checkstyle:checkstyle
- Install JAR in M2 cache : mvn install
- Deploy JAR to Maven repo : mvn deploy
- Run clover : mvn test -Pclover [-DcloverLicenseLocation=${user.name}/.clover.license]
- Run Rat : mvn apache-rat:check
- Build javadocs : mvn javadoc:javadoc
- Build distribution : mvn package [-Pdist][-Pdocs][-Psrc][-Pnative][-Dtar]
- Change Hadoop version : mvn versions:set -DnewVersion=NEWVERSION
maven编译参数说明:
Build options:
- Use -Pnative to compile/bundle native code
- Use -Pdocs to generate & bundle the documentation in the distribution (using -Pdist)
- Use -Psrc to create a project source TAR.GZ
- Use -Dtar to create a TAR with the distribution (using -Pdist)
在hadoop—yarn工程中,container-executor需要进行本地编译,因此需要在打包时指定native profile。对于hadoop-yarn, 完整的打包命令为
mvn package -Pdist,native -DskipTests -Dtar
安装Hortonworks官方RPM
- 使用Ambari或yum安装希望重新打包的服务(本例中的hadoop-yarn),或手动安装rpm
- 当依赖关系比较复杂时,我们可以使用
rpm -ivh *.rpm --nodeps
忽略依赖关系单独安装rpm包,用来查看rpm的安装目录结构
- 当依赖关系比较复杂时,我们可以使用
- 安装完成后进入安装目录,分析该目录与上一步中编译出的项目文件目录的区别,编写脚本,将我们自己编译源代码生成的文件替换到相应的文件位置。
- 例如在hadoop-yarn项目中,我们自己编译好的项目目录结构如下:
|
|
- Hortonworks官方rpm安装目录结构如下:
|
|
更新官方rpm安装后的文件
- 依照Hortonworks官方rpm安装后的文件目录为标准,将我们自己编译的文件复制到相应目录进行替换,编写脚本自动实现从编译到更新文件的工作,针对hadoop-yarn项目的脚本如下:
|
|
使用rpmrebuild将更新后的文件重新打包成rpm
- rpmrebuild是一个用来重新打包rpm的第三方开源工具, 可以将已安装的rpm包按照原rpm的方式重新打包,%pre,%post,%files等部分的脚本保持不变,因此在我们使用自己编译的文件替换官方rpm安装好的文件后,可以直接使用rpmrebuild进行重新打包。
|
|
- $RPM_NAME 可以使用rpm -qa查询得到