对hadoop源码进行编译

前期准备

软件需要

  1. 部署JAVA环境
  2. 安装maven
  3. 安装Protocol Buffer 2.5.0
  4. 安装Findbugs(可选

软件安装

安装maven

  1. 下载解压maven的安装包
[hadoop@hadoop001 software]$ pwd
/home/hadoop/software
[hadoop@hadoop001 software]$ wget https://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
[hadoop@hadoop001 software]$ tar -xzvf apache-maven-3.3.3-bin.tar.gz -C /home/hadoop/app/
备注:开始用maven的tar.gz类型压缩包的时候,一直有点小问题,后来重新下载了maven的zip类型的压缩包,问题突然解决了,我也不太清楚和压缩类型是否有关联,也可能是操作不慎,小伙伴可以留意一下
  1. 配置全局环境变量
[hadoop@hadoop001 software]$  exit
[root@hadoop001 ~]$  vi /etc/profile
export MAVEN_HOME=/home/hadoop/app/apache-maven-3.3.3
export PATH=$MAVEN_HOME/bin:$PATH
[root@hadoop001 ~]$  source /etc/profile
[hadoop@hadoop001 ~]$ mvn -version (验证生效)

安装ProtocolBuffer 2.5.0

  1. 下载解压protobuf-2.5.0
[hadoop@hadoop001 software]$ rz (官网下载的版本里面缺少东西,比如后面configure这个文件夹就没有,所以从其他地方找的压缩包上传的)
[hadoop@hadoop001 software]$ tar -xzvf protobuf-2.5.0.tar.gz -C /home/hadoop/app/

  1. 对protobuf-2.5.0进行编译
[root@hadoop001 ~]# yum install -y gcc gcc-c++ make cmake
[root@hadoop001 ~]# yum install -y autoconf automake libtool curl make g++ unzip
[hadoop@hadoop001 software]$ cd ../app/protobuf-2.5.0
[hadoop@hadoop001 protobuf-2.5.0]$ ./configure --prefix=/home/hadoop/app/protobuf(指定编译之后的安装路径,目录不需要自己去创建,编译过程中会自动创建)
[hadoop@hadoop001 protobuf-2.5.0]$  make && make install (进行安装)

安装完之后:
[hadoop@hadoop001 app]$ ll -d protobuf/
drwxrwxr-x. 5 hadoop hadoop 4096 Nov 30 19:06 protobuf/  (已经自动新建了一个文件夹)
  1. 配置全局环境变量
[root@hadoop001 ~]# vi /etc/profile
export PROTOC_HOME=/home/hadoop/app/protobuf
export PATH=$PROTOC_HOME/bin:$PATH
[root@hadoop001 ~]# source /etc/profile
[root@hadoop001 ~]# protoc  --version
libprotoc 2.5.0  (安装成功)

安装其他依赖包

  1. 为了支持native,我们需要手动去安装支持这些压缩的本地库
[root@hadoop001 ~]# yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool
[root@hadoop001 ~]# yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake

保险起见,再次执行下面的语句,确保都已经下载好了包
[root@hadoop001 ~]# yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake

对hadoop进行编译

  1. 因为我之前已经安装好了hadoop-2.6.0-cdh5.7.0这个版本,所以里面已经安装好了相关的hive sqoop等软件,不想再重新安装一次,我就采用了另一种方法。对hadoop-2.7.4-src.tar.gz 这个版本进行源码编译,编译完成之后把它的下面的native cp(在当前机器编译)或者scp(在另一台机器编译)到hadoop-2.6.0-cdh5.7.0这个版本下面的lib下面,取代其native。这样也是有效,选择2.7.4这个版本的原因是因为官方文档中推荐的稳定版本就是这个,所以考虑到其不会出现软件兼容性的问题,当然我觉得也可以就用cdh的这个src的压缩包编译也是可以,不过本人没试,好奇的小伙伴可以自行尝试。操作步骤如下:
[root@hadoop002 hadoop-2.7.4-src]# pwd (进去到src解压后的文件里去进行mav的编译)
/opt/hadoop-2.7.4-src
[root@hadoop002 hadoop-2.7.4-src]# mvn clean package -Pdist,native -DskipTests -Dtar(一开始使用这个命令一直报错)
[root@hadoop002 hadoop-2.7.4-src]# mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/opt/ -Dbundle.snappy  (后来通过查看博客把命令改为这样,运行成功)
执行成功后,hadoop-2.7.4-src家目录下面的hadoop-dist/target/hadoop-2.6.5.tar.gz即为新生成的二进制安装包,hadoop-dist/target/hadoop-2.6.5 下面有一个lib/native/,把这个native scp到hadoop001这台机器上,发现hadoop001这台机器的cdh版本就有了压缩格式啦
[root@hadoop002 hadoop-2.7.4-src]# scp -r native 192.168.2.65:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/lib/
之后记得要修改native的用户用户组为hadoop

验证:
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ hdfs dfs -ls / (日志已经没有了警告标示)
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ hadoop checknative
18/12/01 13:37:36 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
Native library checking:
hadoop:  true /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/lib/native/libhadoop.so
zlib:    true /lib64/libz.so.1
snappy:  true /usr/lib64/libsnappy.so.1
lz4:     true revision:99
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so
至此发现编译当前机器的cdh版本已经支持了压缩格式,搞定~

参考文档

  1. 文档1
  2. 文档2
  3. 文档3
  4. 文档4
  5. 文档5
  6. GitHub官方的hadoop源码
  7. maven的源码压缩包
  8. hadoop2.7.4版本的源码压缩包

猜你喜欢

转载自blog.csdn.net/qq_42694416/article/details/84668711