大数据源码编译系列——Hadoop编译

  |   0 评论   |   3,601 浏览

注意:本文是按照生产环境的要求来编译的,因为考虑了下面的需求,所以步骤较为复杂,如果单纯为了测试的需求,就没有必要这么复杂了

  1. 添加了Snappy压缩

  2. 使用JDK8,因为大数据平台中部分组件已经要求最低JDK8了,如presto,所以统一版本


准备环境

JDK8

Maven

Ant

Git

GCC

Cmake

编译Hadoop

下载地址

CDH发行版下载地址

解压

[root@nn1 local]# cd /usr/local/src/
[root@nn1 src]# wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.11.1-src.tar.gz
[root@nn1 src]# tar zxvf hadoop-2.6.0-cdh5.11.1-src.tar.gz -C /usr/local/src/

使用JDK8需要改动的地方

修改Hadoop依赖的JDK版本

[root@nn1 hadoop-2.6.0-cdh5.11.1]# sed -i "s/1.7/1.8/g" `grep javaVersion -rl /usr/local/src/hadoop-2.6.0-cdh5.11.1/pom.xml`

否则会报以下错误

[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
Detected JDK Version: 1.8.0-131 is not in the allowed range [1.7.0,1.7.1000}].

替换依赖的jdk.tools版本

[root@nn1 hadoop-2.6.0-cdh5.11.1]# sed -i "s/1.7/1.8/g" `grep 1.7 -rl /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/pom.xml`

否则会报以下错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project hadoop-annotations: Compilation failure: Compilation failure: 
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[20,22] error: package com.sun.javadoc does not exist
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[21,22] error: package com.sun.javadoc does not exist
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[22,22] error: package com.sun.javadoc does not exist
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java:[35,16] error: cannot find symbol
[ERROR]   symbol:   class LanguageVersion
[ERROR]   location: class ExcludePrivateAnnotationsJDiffDoclet

替换不规范的字符

[root@nn1 hadoop-2.6.0-cdh5.11.1]# sed -i "s/<\/ul>//g" `grep "</ul>" -l /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/InterfaceStability.java`

这应该是手抖了吧。。。

否则会报以下错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on project hadoop-annotations: MavenReportException: Error while creating archive: 
[ERROR] Exit code: 1 - /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/InterfaceStability.java:27: error: unexpected end tag: </ul>
[ERROR]  * </ul>
[ERROR]    ^
[ERROR] 
[ERROR] Command line was: /usr/local/jdk1.8.0_131/jre/../bin/javadoc @options @packages
[ERROR] 
[ERROR] Refer to the generated Javadoc files in '/usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-annotations/target' dir.
[ERROR]

关闭DocLint特性

Java 8 新增了DocLint特性,这个特性主要是在开发阶段生产javadoc文档之前就检查Javadoc注释的错误,并且链接到源代码。如果javadoc的注释有错误,不生产javadoc。

默认情况下DocLint功能是开启的,在配置里添加-Xdoclint:none可以关闭这个功能,生成javadoc就不会做检查。

[root@nn1 local]# vim /usr/local/src/hadoop-2.6.0-cdh5.11.1/pom.xml

在<properties></properties>之间添加如下属性

<additionalparam>-Xdoclint:none</additionalparam>

image.png

否则会报以下错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on project hadoop-nfs: MavenReportException: Error while creating archive: 
[ERROR] Exit code: 1 - /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcCallCache.java:126: warning: no @return
[ERROR]   public String getProgram() {
[ERROR]                 ^
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcCallCache.java:131: warning: no @param for clientId

修复bug

https://issues.apache.org/jira/browse/YARN-3400

否则会报

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project hadoop-yarn-common: Compilation failure: Compilation failure: 
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ipc/RPCUtil.java:[101,10] error: unreported exception Throwable; must be caught or declared to be thrown
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ipc/RPCUtil.java:[104,10] error: unreported exception Throwable; must be caught or declared to be thrown
[ERROR] /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/ipc/RPCUtil.java:[107,10] error: unreported exception Throwable; must be caught or declared to be thrown

安装protobuf

版本必须与Hadoop一致,否则会报错

[WARNING] [protoc, --version] failed: java.io.IOException: Cannot run program "protoc": error=2, No such file or directory
[ERROR] stdout: []

查看Hadoop版本中指定的protobuf版本

[root@nn1 5.11.1]# grep "<cdh.protobuf.version>" /root/.m2/repository/com/cloudera/cdh/cdh-root/5.11.1/cdh-root-5.11.1.pom
    <cdh.protobuf.version>2.5.0</cdh.protobuf.version>

替换yum源为aliyun

[root@nn1 protobuf-2.5.0]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

安装

[root@nn1 protobuf-2.5.0]# wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz 
[root@nn1 protobuf-2.5.0]# tar zxvf protobuf-2.5.0.tar.gz -C /usr/local/src/
[root@nn1 protobuf-2.5.0]# cd /usr/local/src/protobuf-2.5.0/
[root@nn1 protobuf-2.5.0]# ./configure --prefix=/usr/local/protobuf
[root@nn1 protobuf-2.5.0]# make && make install

验证

[root@nn1 protobuf-2.5.0]# protoc --version
libprotoc 2.5.0

安装Snappy本地库

安装snappy本地库

开始编译Hadoop

[root@nn1 hadoop-2.6.0-cdh5.11.1]# cd /usr/local/src/hadoop-2.6.0-cdh5.11.1
[root@nn1 hadoop-2.6.0-cdh5.11.1]# mvn clean package -Pdist,native -DskipTests -Dtar -Drequire.snappy

不出意外的话编译能成功

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Apache Hadoop Main ................................. SUCCESS [  3.553 s]
[INFO] Apache Hadoop Build Tools .......................... SUCCESS [  2.021 s]
[INFO] Apache Hadoop Project POM .......................... SUCCESS [  3.408 s]
[INFO] Apache Hadoop Annotations .......................... SUCCESS [  5.691 s]
[INFO] Apache Hadoop Assemblies ........................... SUCCESS [  0.766 s]
[INFO] Apache Hadoop Project Dist POM ..................... SUCCESS [  2.075 s]
[INFO] Apache Hadoop Maven Plugins ........................ SUCCESS [  6.318 s]
[INFO] Apache Hadoop MiniKDC .............................. SUCCESS [  8.851 s]
[INFO] Apache Hadoop Auth ................................. SUCCESS [ 12.287 s]
[INFO] Apache Hadoop Auth Examples ........................ SUCCESS [  4.473 s]
[INFO] Apache Hadoop Common ............................... SUCCESS [02:21 min]
[INFO] Apache Hadoop NFS .................................. SUCCESS [  8.208 s]
[INFO] Apache Hadoop KMS .................................. SUCCESS [ 17.788 s]
[INFO] Apache Hadoop Common Project ....................... SUCCESS [  0.124 s]
[INFO] Apache Hadoop HDFS ................................. SUCCESS [03:32 min]
[INFO] Apache Hadoop HttpFS ............................... SUCCESS [ 24.005 s]
[INFO] Apache Hadoop HDFS BookKeeper Journal .............. SUCCESS [ 10.143 s]
[INFO] Apache Hadoop HDFS-NFS ............................. SUCCESS [  8.074 s]
[INFO] Apache Hadoop HDFS Project ......................... SUCCESS [  0.102 s]
[INFO] hadoop-yarn ........................................ SUCCESS [  0.133 s]
[INFO] hadoop-yarn-api .................................... SUCCESS [ 47.059 s]
[INFO] hadoop-yarn-common ................................. SUCCESS [ 37.937 s]
[INFO] hadoop-yarn-server ................................. SUCCESS [  0.085 s]
[INFO] hadoop-yarn-server-common .......................... SUCCESS [ 12.607 s]
[INFO] hadoop-yarn-server-nodemanager ..................... SUCCESS [ 24.198 s]
[INFO] hadoop-yarn-server-web-proxy ....................... SUCCESS [  5.159 s]
[INFO] hadoop-yarn-server-applicationhistoryservice ....... SUCCESS [  8.094 s]
[INFO] hadoop-yarn-server-resourcemanager ................. SUCCESS [ 27.626 s]
[INFO] hadoop-yarn-server-tests ........................... SUCCESS [  2.873 s]
[INFO] hadoop-yarn-client ................................. SUCCESS [  9.218 s]
[INFO] hadoop-yarn-applications ........................... SUCCESS [  0.157 s]
[INFO] hadoop-yarn-applications-distributedshell .......... SUCCESS [  3.990 s]
[INFO] hadoop-yarn-applications-unmanaged-am-launcher ..... SUCCESS [  2.999 s]
[INFO] hadoop-yarn-site ................................... SUCCESS [  0.086 s]
[INFO] hadoop-yarn-registry ............................... SUCCESS [  6.804 s]
[INFO] hadoop-yarn-project ................................ SUCCESS [  6.772 s]
[INFO] hadoop-mapreduce-client ............................ SUCCESS [  0.274 s]
[INFO] hadoop-mapreduce-client-core ....................... SUCCESS [ 30.233 s]
[INFO] hadoop-mapreduce-client-common ..................... SUCCESS [ 23.007 s]
[INFO] hadoop-mapreduce-client-shuffle .................... SUCCESS [  5.510 s]
[INFO] hadoop-mapreduce-client-app ........................ SUCCESS [ 13.037 s]
[INFO] hadoop-mapreduce-client-hs ......................... SUCCESS [  8.932 s]
[INFO] hadoop-mapreduce-client-jobclient .................. SUCCESS [ 11.434 s]
[INFO] hadoop-mapreduce-client-hs-plugins ................. SUCCESS [  3.725 s]
[INFO] hadoop-mapreduce-client-nativetask ................. SUCCESS [01:40 min]
[INFO] Apache Hadoop MapReduce Examples ................... SUCCESS [  8.043 s]
[INFO] hadoop-mapreduce ................................... SUCCESS [  6.322 s]
[INFO] Apache Hadoop MapReduce Streaming .................. SUCCESS [  7.929 s]
[INFO] Apache Hadoop Distributed Copy ..................... SUCCESS [ 13.127 s]
[INFO] Apache Hadoop Archives ............................. SUCCESS [  3.133 s]
[INFO] Apache Hadoop Archive Logs ......................... SUCCESS [  3.350 s]
[INFO] Apache Hadoop Rumen ................................ SUCCESS [  7.973 s]
[INFO] Apache Hadoop Gridmix .............................. SUCCESS [  6.048 s]
[INFO] Apache Hadoop Data Join ............................ SUCCESS [  4.343 s]
[INFO] Apache Hadoop Ant Tasks ............................ SUCCESS [  3.087 s]
[INFO] Apache Hadoop Extras ............................... SUCCESS [  4.258 s]
[INFO] Apache Hadoop Pipes ................................ SUCCESS [  8.613 s]
[INFO] Apache Hadoop OpenStack support .................... SUCCESS [  8.585 s]
[INFO] Apache Hadoop Amazon Web Services support .......... SUCCESS [ 12.956 s]
[INFO] Apache Hadoop Azure support ........................ SUCCESS [  6.178 s]
[INFO] Apache Hadoop Client ............................... SUCCESS [  6.899 s]
[INFO] Apache Hadoop Mini-Cluster ......................... SUCCESS [  2.285 s]
[INFO] Apache Hadoop Scheduler Load Simulator ............. SUCCESS [  7.916 s]
[INFO] Apache Hadoop Azure Data Lake support .............. SUCCESS [  4.426 s]
[INFO] Apache Hadoop Tools Dist ........................... SUCCESS [ 12.850 s]
[INFO] Apache Hadoop Tools ................................ SUCCESS [  0.104 s]
[INFO] Apache Hadoop Distribution ......................... SUCCESS [ 41.881 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17:28 min
[INFO] Finished at: 2017-06-24T06:35:39-07:00
[INFO] Final Memory: 192M/584M
[INFO] ------------------------------------------------------------------------

编译结果位于/usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-dist/target/

hadoop-2.6.0-cdh5.11.1.tar.gz是压缩包

hadoop-2.6.0-cdh5.11.1是文件夹

[root@nn1 hadoop-2.6.0-cdh5.11.1]# ll /usr/local/src/hadoop-2.6.0-cdh5.11.1/hadoop-dist/target/hadoop-2.6.0-cdh5.11.1/lib/native/
total 15048
-rw-r--r--. 1 root root 1211220 Jun 24 06:34 libhadoop.a
-rw-r--r--. 1 root root 1487316 Jun 24 06:34 libhadooppipes.a
lrwxrwxrwx. 1 root root      18 Jun 24 06:34 libhadoop.so -> libhadoop.so.1.0.0
-rwxr-xr-x. 1 root root  716628 Jun 24 06:34 libhadoop.so.1.0.0
-rw-r--r--. 1 root root  582128 Jun 24 06:34 libhadooputils.a
-rw-r--r--. 1 root root  369326 Jun 24 06:34 libhdfs.a
lrwxrwxrwx. 1 root root      16 Jun 24 06:34 libhdfs.so -> libhdfs.so.0.0.0
-rwxr-xr-x. 1 root root  235716 Jun 24 06:34 libhdfs.so.0.0.0
-rw-r--r--. 1 root root 7706948 Jun 24 06:34 libnativetask.a
lrwxrwxrwx. 1 root root      22 Jun 24 06:34 libnativetask.so -> libnativetask.so.1.0.0
-rwxr-xr-x. 1 root root 3082885 Jun 24 06:34 libnativetask.so.1.0.0

配置Snappy压缩

Hadoop配置Snappy压缩


读后有收获可以支付宝请作者喝咖啡