前期准备
软件需要
- 部署JAVA环境
- 安装maven
- 安装Protocol Buffer 2.5.0
- 安装Findbugs(可选)
软件安装
安装maven
- 下载解压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类型的压缩包,问题突然解决了,我也不太清楚和压缩类型是否有关联,也可能是操作不慎,小伙伴可以留意一下
- 配置全局环境变量
[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
- 下载解压protobuf-2.5.0
[hadoop@hadoop001 software]$ rz (官网下载的版本里面缺少东西,比如后面configure这个文件夹就没有,所以从其他地方找的压缩包上传的)
[hadoop@hadoop001 software]$ tar -xzvf protobuf-2.5.0.tar.gz -C /home/hadoop/app/
- 对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/ (已经自动新建了一个文件夹)
- 配置全局环境变量
[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 (安装成功)
安装其他依赖包
- 为了支持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进行编译
- 因为我之前已经安装好了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
- 文档2
- 文档3
- 文档4
- 文档5
- GitHub官方的hadoop源码
- maven的源码压缩包
- hadoop2.7.4版本的源码压缩包