Hadoop3.1.1Build中⽂⽂档
3.1.1 Hadoop 构建说明:
依赖的软件:
* Unix System
* JDK 1.8
* Maven 3.3 or later
* ProtocolBuffer 2.5.0
* CMake 3.1 or newer (if compiling native code)
* Zlib devel (if compiling native code)
* openssl devel (if compiling native hadoop-pipes and to get the best HDFS encryption performance)
* 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)
* python (for releasedocs)
* bats (for shell code testing)
* Node.js / bower / Ember-cli (for YARN UI v2 building)
----------------------------------------------------------------------------------
最简单的获取构建的⽅式是通过提供的Docker Config 获取全部的合适的构建环境和⼯具,这个要求⼀个⽐较新的
Docker版本(1.4.1 或以上的版本)
然后在 Linux上:
安装Docker后,执⾏命令 : $ ./start-build-env.sh
在Mac OS上:
接下来的Terminal窗⼝会位于源代码的挂载版本中,所有测试和构建所需的⼯具都已安装和配置。注意,在这个Docker
环境⾥,你只能在此处 access Hadoop 的源代码,所以如果你需要运⾏:
dev-support/bin/test-patch /path/to/my.patch
那么你的Patch 只能放在 Hadoop 的源代码中
在新安装的 Ubuntu 14.04 LTS 桌⾯OS 上,要求安装的 packages 有:
* Oracle JDK 1.8 (更合适)
sudoapt−getpurgeopenjdk∗ sudo apt-get install software-properties-common
sudoadd−apt−repositoryppa:webupd8team/java sudo apt-get update
sudoapt−getinstalloracle−java8−installer∗Maven sudo apt-get -y install maven
* Native libraries (OS 本地库)
sudoapt−get−yinstallbuild−essentialautoconfautomakelibtoolcmakezlib1g−devpkg−configlibssl−dev∗ProtocolBuffer2.5.0(必须安装的软件) sudo apt-get -y install protobuf-compiler
可选安装的 packages:
Maven 主要的⽬录结构:
hadoop (Main Hadoop project)
- hadoop-project (Parent POM for all Hadoop Maven modules. )
(All plugins & dependencies versions are defined here.)
- hadoop-project-dist (Parent POM for modules that generate distributions.)
- hadoop-annotations (Generates the Hadoop doclet used to generated the Javadocs)
- hadoop-assemblies (Maven assemblies used by the different modules)
- hadoop-common-project (Hadoop Common)
- hadoop-hdfs-project (Hadoop HDFS)
- hadoop-mapreduce-project (Hadoop MapReduce)
- hadoop-tools (Hadoop tools like Streaming, Distcp, etc.)
- hadoop-dist (Hadoop distribution assembler)
从哪⾥下 Maven 的命令?
Maven的命令可以在任何⼦模块中运⾏. 唯⼀的缺点是如果不是从utrunk 上下达MAVEN 命令,那么其他所有
的⾮当前模块都需要存在于Maven的 Cache中,或者能从 Maven Repository中下载.
Maven 构建的 goals:
* Clean : mvn clean [-Preleasedocs]
* Compile : mvn compile [-Pnative]
* Run tests : mvn test [-Pnative] [-Pshelltest]
* 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][-Preleasedocs][-Pyarn-ui]
* Change Hadoop version : mvn versions:set -DnewVersion=NEWVERSION
Build 选项:
* 使⽤ -Pnative 来编译或打包 native code
* 使⽤ -Pdocs 来⽣成或打包发⾏版本的⽂档 (using -Pdist)
* 使⽤ -Psrc 来创建Hadoop源代码的压缩包
* 使⽤ -Dtar 创建Hadoop发⾏的压缩包 (using -Pdist)
* 使⽤ -Preleasedocs ⽂档中囊括 ChangeLog 和Rlease Doc (要求⽹络链接)
* 使⽤ -Pyarn-ui 来构建 YARN UI 的v2版本. (要求⽹络链接)
* 使⽤ -DskipShade 构建时关闭依赖包括的Sharding Feature来加速构建时间(在开发环境中⽤,不要在构建Release时⽤)Snappy build 选项:
Snappy 是 native code 是可⽤的压缩库。它是可选项,构建Hadoop时它可有可⽆
* 使⽤ -Drequire.snappy 让 Biuld Process 在 libsnappy.so 不存在情况下失败退出.
如果这个Option 没有制定同时libsnappy.so ⼜不存在. 脚本会构建⼀个不包括 snappy 功能的libhadoop.so。
如果你要⽤ snappy 或者让构建可以重复性变⾼,我们推荐你⽤这个 Option
* 使⽤ -Dsnappy.prefix ⾃定义 libsnappy的 header ⽂件和 library ⽂件.
如果你使⽤了 Package Manager 安装了 snappy,就不需要这个 Option 了.
* 使⽤ -Dsnappy.lib ⾃定义libsnappy library 的位置. 和 snappy.prefix ⼀样,
如果你使⽤了 Package Manager 安装了 snappy,就不需要这个 Option 了
* 使⽤ -Dbundle.snappy 把 snappy.lib directory 内容拷贝到最终编译出来的 tar包中。
这个Option 要求你要同时使⽤ -Dsnappy.lib (没指定会Build失败),且忽略 -Dsnappy.prefix option.
ZStandard build 选项:
ZStandard 是 native code 是可⽤的压缩库。它是可选项,构建Hadoop时它可有可⽆
* 使⽤ -Drequire.zstd 让 Biuld Process 在 libzstd.so 不存在情况下失败退出.
如果这个 Option 没有被指定,那么 zstd library 就不会存在
* 使⽤ -Dzstd.prefix to ⾃定义 libzstd header files and library files.
如果你使⽤了 Package Manager 安装了 zstandard 就不需要这个 Option 了.
* 使⽤ -Dzstd.lib ⾃定义 libzstd library 路径
和 zstd.prefix ⼀样, 如果你使⽤了 Package Manager 安装了 libzstd就不需要这个 Option了
* 使⽤ -Dbundle.zstd 把 zstd.lib directory 内容拷贝到最终编译出来的 tar包中。
这个Option 要求你要同时使⽤ -Dzstd.lib (没指定会Build失败),且忽略 -Dzstd.prefix option.
OpenSSL build 选项:
OpenSSL 是 native code 是可⽤的加密库. 它是可选项,构建Hadoop时它可有可⽆
* 使⽤ -Drequire.openssl 让 Biuld Process 在 libcrypto.so 不存在情况下失败退出.
如果这个Option 没有指定且同时libsnappy.so ⼜不存在. 脚本会构建⼀个不包括 openssl 功能的libhadoop.so。
如果你要⽤ openssl 或者让构建可以重复性变⾼,我们推荐你⽤这个 Option
* 使⽤ -Dopenssl.prefix ⾃定义 libcrypto header files and library files 的路径.
如果你使⽤了 Package Manager 安装了 zstandard 就不需要这个 Option 了.
* 使⽤ -Dopenssl.lib ⾃定义libcrypto library ⽂件路径.
和 openssl.prefix ⼀样, 如果你使⽤了 Package Manager 安装了 libzstd 就不需要这个 Option了
* 使⽤ -Dbundle.openssl 把 openssl.lib directory 内容拷贝到最终编译出来的 tar 包中。
这个Option 要求你要同时使⽤ -Dopenssl.lib (没指定会Build失败),且忽略 -Dopenssl.prefix option.
Tests 选项:
* 使⽤ -DskipTests 在运⾏ Maven 以下goals时,跳过Run Test case,Goals包括:'package', 'install', 'deploy' or 'verify'
* -Dtest=<TESTCLASSNAME>,<TESTCLASSNAME#METHODNAME>,....
* -lude=<TESTCLASSNAME>
* -lude.pattern=**/<TESTCLASSNAME1>.java,**/<TESTCLASSNAME2>.java
* 跑全部 native unit tests: mvn test -Pnative -Dtest=allNative
* 跑特定的native unit tests: mvn test -Pnative -Dtest=<test>
举例运⾏⼀个叫 test_bulk_crc32 Tests, 命令如下:
mvn test -Pnative -Dtest=test_bulk_crc32
Intel ISA-L build 选项:
* 使⽤ -Drequire.isal 让 Biuld Process 在 libisal.so 不存在情况下失败退出.
如果这个Option 没有指定的同时 libisal.so ⼜不存在. 脚本会构建⼀个不包括 ISA-L 功能的libhadoop.so。
如果你要⽤ native raw erasure coders 功能或者让构建可以重复性变⾼,我们推荐你⽤这个 Option
* 使⽤ -Disal.prefix ⾃定义 libisal files 的路径.
如果你的环境变量路径⾥已经安装了ISA-L,就不需要这个 Option 了.
* 使⽤ -Disal.lib ⾃定义libcrypto library ⽂件路径.
* 使⽤ -Dbundle.isal 把 isal.lib directory 内容拷贝到最终编译出来的 tar 包中。
这个Option 要求你要同时使⽤ -Disal.lib (没指定会Build失败),且忽略 -Disal.prefix option.
特别的插件: OWASP 的 dependency-check:
OWASP 的 dependency-check 插件会根据已知的CVEs (他们可能存在的安全缺陷)
扫描对 third party 依赖。他会在 target/dependency-check-report.html 产⽣⼀个 Html 报告。
你可以通过运⾏ 'mvn dependency-check:aggregate' 来产⽣这个报告。
注意,这个插件要求 maven的版本在 3.1.1+ !
各模块的单独Build
如果你准备单独构建Hadoop 的⼦模块,那该模块所依赖的库或包全部被当做第三⽅库;这就意味着
这些库会从你的Maven cache 或者从 Remote Maven Repository 去下载。
有⼀个变通的⽅法是在Hadoop 的根⽬录下运⾏⼀次 'mvn install -DskipTests';然后在去⼦模块去
编译。注意:Maven构建出来的 SNAPSHOTs 会在⼀段时间后 timeout,你最好使⽤ Maven '-nsu' 参
数来禁⽌从外部 Maven Repo 下载依赖来更新你的 SNAPSHOTs
Protocol Buffer 编译器
Protocol Buffer 编译器 'protoc' 的版本必须和 protobuf JAR包匹配
如果你本地有⼏个版本的 protoc,你可以在Build Shell ⾥⾯指定HADOOP_PROTOC_PATH 环境变量来选择,否则, protoc 会依据 $PATH 环境变量到第⼀个来使⽤
将 Hadoop 导⼊ eclipse
当你想把Hadoop 项⽬导⼊eclipse 时,你需要先安装 hadoop-maven-plugins
cdhadoop−maven−plugins mvn install
然后参数 Eclipse ⼯程⽂件.
$ mvn eclipse:eclipse -DskipTests
最后在通过已经存在的⼯程导⼊Eclipse 即可
[File] > [Import] > [Existing Projects into Workspace].
构建发⾏版:
构建⼀个不包括natvie code 和 documentation 的 hadoop binary:
$ mvn package -Pdist -DskipTests -Dtar -Dmaven.javadoc.skip=true
maven打包本地jar包构建⼀个包括natvie code 和⽂档的 hadoop binary:
$ mvn package -Pdist,native,docs -DskipTests -Dtar
构建源代码包:
$ mvn package -Psrc -DskipTests
构建⼀个包括native code 和 documentation的 source 包和 binary 包
$ mvn package -Pdist,native,docs,src -DskipTests -Dtar
(在/tmp/hadoop-site)构建⼀个临时的本地⽹站
$ mvn clean site -Preleasedocs; mvn site:stage -DstagingDirectory=/tmp/hadoop-site
注意,这个⽹站需要在其他的包Ready 之后才能构建
安装 Hadoop
当你安装上⾯给出的命令build 出 Hadoop 后,请参考下⾯的⽹站使⽤:
* Single Node Setup:
hadoop-project-dist/hadoop-common/SingleCluster.html
* Cluster Setup:
hadoop-project-dist/hadoop-common/ClusterSetup.html
解决Build 过程中的 memory errors
如果在构建的过程中遇到了 out of memory 的错误,你应该使⽤MAVEN_OPTS 的环境变量来添加Maven 可以使⽤的Memory
举例:你会设定Maven可以使⽤ 256M 到 1.5G 的Java 堆空间,请这样配置:
export MAVEN_OPTS="-Xms256m -Xmx1536m"
----------------------------------------------------------------------------------
(不建议使⽤Window,我就不翻译了)Building on Windows
----------------------------------------------------------------------------------
Processing math: 100%
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论