在安装CDH版本的hadoop的时候, 我们下载下来的CDH的hadoop安装包中, 并没有native包,不支持各个任务阶段的压缩功能,但在生产任务中是必须要支持压缩功能的,所以要对CDH进行编译以支持压缩功能;


本次编译使用的各软件版本:

cdh:hadoop-2.6.0-cdh5.7.0-src.tar.gz
jdk:1.7(经多位同学踩坑,不要使用1.8版本的)
maven:apache-maven-3.3.9-bin.tar.gz 
protobuf:protobuf-2.5.0.tar.gz
系统:Centos 7.5

cdh官方下载地址:http://archive.cloudera.com/cdh5/cdh/5

依赖的软件百度网盘地址

repo.tar.gz链接:https://pan.baidu.com/s/1wGCgV_3R3VUm2ka_aVA8GQ提取码:lrej
Hadoop Hadoop-2.6.0-cdh5.7.0-src.tar.gz 链接:https://pan.baidu.com/s/1uRMGIhLSL9QHT-Ee4F16jw提取码:jb1d
jdk jdk-7u80-linux-x64.tar.gz 链接:https://pan.baidu.com/s/1xSCQ8rjABVI-zDFQS5nCPA提取码:lfze
maven apache-maven-3.3.9-bin.tar.gz链接:https://pan.baidu.com/s/1ddkdkLW7r7ahFZmgACGkVw 提取码:fdfz
protobuf protobuf-2.5.0.tar.gz链接:https://pan.baidu.com/s/1RSNZGd_ThwknMB3vDkEfhQ 提取码:hvc2


首先安装各种依赖:

yum install -y svn ncurses-devel
yum install -y gcc gcc-c++ make cmake
yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool
yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake cmake

配置jdk的环境变量:

[root@hadoop004 soft]# cat /etc/profile.d/java.sh 
export JAVA_HOME=/usr/java/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

[root@hadoop004 soft]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

配置maven的环境变量:

#配置环境变量
[root@hadoop004 soft]# cat /etc/profile.d/maven.sh 
MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH

[root@hadoop004 local]# mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: /usr/java/jdk1.7.0_79/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.3.2.el7.x86_64", arch: "amd64", family: "unix"

#配置mvn的本地存放地址
<localRepository>/usr/local/maven/repo</localRepository>
将上面下载repo.tar.gz解压后的内容放在此本地仓库目录下,以便于cdh编译时直接使用,否则下载将浪费大量的时间

#配置mvn下载源为阿里云的maven仓库
<mirror>
	<id>alimaven</id>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	<mirrorOf>central</mirrorOf>
</mirror>

编译安装protobuf并配置环境变量:

#编译安装命令
tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure  --prefix=/root/protobuf/
make
make install

#配置环境变量
[root@hadoop004 soft]# cat /etc/profile.d/protobuf.sh 
PROTOC_HOME=/usr/local/protobuf
export PATH=$PROTOC_HOME/bin:$PATH

#查看是否安装成功
source /etc/profile.d/protobuf.sh
[root@hadoop004 soft]# protoc --version
libprotoc 2.5.0

编译cdh的hadoop源码:

tar -xzvf hadoop-2.6.0-cdh5.7.0-src.tar.gz
cd hadoop-2.6.0-cdh5.7.0
mvn clean package -Pdist,native -DskipTests -Dtar

遇到的错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (make) on project hadoop-pipes: An Ant BuildException has occured: exec returned: 1
[ERROR] around Ant part ...<exec dir="/data/soft/hadoop-2.6.0-cdh5.7.0/hadoop-tools/hadoop-pipes/target/native" executable="cmake" failοnerrοr="true">... @ 5:126 in /data/soft/hadoop-2.6.0-cdh5.7.0/hadoop-tools/hadoop-pipes/target/antrun/build-main.xml
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :hadoop-pipes

LNEP`C_(U}U~0$C[S@AD{DD.png

问题原因:在安装依赖的过程,漏装了openssl-devel;yum install -y openssl-devel

再次执行上面的安装命令:

tar -xzvf hadoop-2.6.0-cdh5.7.0-src.tar.gz
cd hadoop-2.6.0-cdh5.7.0
mvn clean package -Pdist,native -DskipTests -Dtar

注:由于已经提前将cdh需要下载的依赖,放入了maven的本地仓库中了,所以节省了大量的下载时间

9$HX@U%CEEJBOWFOXYY(W}D.png

编译后的文件:

    位置:./hadoop-dist/target目录下

    文件:hadoop-2.6.0-cdh5.7.0

    压缩文件:hadoop-2.6.0-cdh5.7.0.tar.gz

    image.png

测试查看是否支持各种压缩:

[root@hadoop004 hadoop-2.6.0-cdh5.7.0]# ./bin/hadoop checknative
19/04/18 15:09:34 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
19/04/18 15:09:34 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /data/soft/hadoop-2.6.0-cdh5.7.0/hadoop-dist/target/hadoop-2.6.0-cdh5.7.0/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
snappy:  true /lib64/libsnappy.so.1
lz4:     true revision:99
bzip2:   true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so

     image.png

移动到其它机器时的报错及解决方案:

    注意如果拷贝tar包到新的机器安装检查checknative报错

    openssl: false Cannot load libcrypto.so (libcrypto.so: 无法打开共享对象文件: 没有那个文件或目录)!

      8808b2616a261dba961df007be81da43b47.jpg

    centos中运行yum install openssl-devel -y

      2.jpg