hadoop3.2.3 编译 native库(超详细,亲测成功)

为什么要编译 native 库

hadoop 二进制包是提供预编译的 native 库,但是 32 位的,服务器基本是 64 位,所以需要重新编译 native 库,而且要在这个重新编译的 native 库绑定 snappy,bizp2,lz4 这些压缩算法,以及 zstd , 这个是 facebook 出品压缩算法,还有 isa-l 纠删码openssl

安装工具包

yum install -y gcc gcc-c++ automake autoconf libtool yasm nasm

安装 zlib,bzip2,lz4

yum install -y bzip2 bzip2-devel zlib zlib-devel lz4 lz4-devel

安装 openssl

yum install -y openssl-devel

安装 JDK8,maven

jdk8 安装
jdk8 这里用华为的 openjdk,
华为的 openjdk 下载地址:
https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_jdk/bisheng-jdk-8u322-linux-x64.tar.gz
安装:

tar xzvf bisheng-jdk-8u322-linux-x64.tar.gz
mv bisheng-jdk1.8.0_322 open-jdk
mv open-jdk /usr/local/lib

maven 下载地址:
https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
安装:

tar xzvf apache-maven-3.8.5-bin.tar.gz
mv apache-maven-3.8.5-bin maven
mv maven /usr/local/lib

初始化 maven 仓库

 mvn help:effective-settings

设置 maven 国内镜像,这个一定要设置

cp /usr/local/lib/maven/conf/settings.xml /root/.m2/

打开 /root/.m2/settings.xml,查找 mirrors,插入以下内容:

<mirror>
    <id>nexus-tencentyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus tencentyun</name>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>

设置环境变量
在 /etc/profile 添加:

export JAVA_HOME=/usr/local/lib/open-jdk
export E2_HOME=/usr/local/lib/maven
export PATH=$JAVA_HOME/bin:$E2_HOME/bin:$PATH

使环境变量生效

source /etc/profile

验证一下

java -version
mvn -version

看到下面输出安装成功

在这里插入图片描述

安装 cmake

下载地址:https://cmake.org/files/v3.1/cmake-3.1.0-Linux-x86_64.tar.gzz

编译安装

tar xzvf cmake-3.1.0-Linux-x86_64.tar
cd cmake-3.1.0-Linux-x86_64
cp -r share/* /usr/share/
cp bin/* /usr/bin/

验证一下

cmake -version

看到下面输出安装成功

在这里插入图片描述

安装 protobuf

这里一定要注意:hadoop 3.2.3 需要的 protobuf 版本是 2.5.0
下载地址:
https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz

编译安装

./autogen.sh
./configure
make
make install

验证一下

protoc --version

看到下面输出安装成功

在这里插入图片描述

安装 snappy

下载地址
https://github.com/google/snappy/archive/refs/tags/1.1.7.tar.gz

编译安装

tar xf 1.1.7.tar.gz
cd snappy-1.1.7
mkdir -p build
cd build
cmake ..
make install
cd ..
cp build/libsnappy.a /usr/lib
cp build/snappy-stubs-public.h /usr/include/
cp snappy-c.h /usr/include/
cp snappy.h /usr/include/

验证一下

ls -lh /usr/lib64/ | grep snappy

看到下面输出安装成功

在这里插入图片描述

安装 zstd

下载地址
https://codeload.github.com/facebook/zstd/tar.gz/refs/tags/v1.4.10

编译安装

tar xzvf zstd-1.4.10.tar.gz
cd zstd-1.4.10
make && make install

验证一下
zstd 安装在 /usr/local/lib

ls /usr/local/lib | grep zstd

看到下面输出安装成功

在这里插入图片描述

安装 isa-l

下载地址
https://codeload.github.com/intel/isa-l/tar.gz/refs/tags/v2.30.0

编译安装

tar xzvf isa-l-2.30.0.tar.gz
cd isa-l-2.30.0
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib64
make
make install

验证一下
isal 安装在 /usr/lib64

ls /usr/lib64/ | grep isal

看到下面输出安装成功

在这里插入图片描述

安装 aws-DynamoDBLocal 包

下载地址
jar 包
https://s3-us-west-2.amazonaws.com/dynamodb-local/release/com/amazonaws/DynamoDBLocal/1.11.86/DynamoDBLocal-1.11.86.jar
pom 文件
https://s3-us-west-2.amazonaws.com/dynamodb-local/release/com/amazonaws/DynamoDBLocal/1.11.86/DynamoDBLocal-1.11.86.pom

将 jar 包和 pom 文件移动到 maven 仓库

mkdir -p ~/.m2/repository/com/amazonaws/DynamoDBLocal/1.11.86

mv DynamoDBLocal-1.11.86.jar ~/.m2/repository/com/amazonaws/DynamoDBLocal/1.11.86

mv DynamoDBLocal-1.11.86.pom ~/.m2/repository/com/amazonaws/DynamoDBLocal/1.11.86

安装 aws-java-sdk-bundle 包

下载地址
https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.901/aws-java-sdk-bundle-1.11.901.jar

maven 手动安装 jar 包

mvn install:install-file -Dfile=aws-java-sdk-bundle-1.11.901.jar -DgroupId=com.amazonaws -DartifactId=aws-java-sdk-bundle -Dversion=1.11.901 -Dpackaging=jar

编译 native 库

mvn clean package -DskipTests -Pdist,native  -Dtar -Dbundle.snappy=true -Drequire.snappy=true  -Dsnappy.prefix=/usr/lib64  -Dsnappy.lib=/usr/lib64  -Drequire.zstd=true -Dbundle.zstd=true -Dzstd.lib=/usr/local/lib -Dbundle.isal=true -Drequire.isal=true -Disal.prefix=/usr/lib64 -Disal.lib=/usr/lib64  

解释下上面的参数
Pdist,native :编译生成 hadoop 动态库
DskipTests :跳过测试
Dtar :以tar打包
Dbundle.snappy: 添加 snappy 压缩支持
Dsnappy.lib: snappy 库路径

最后大概编译了 20 多分钟

在这里插入图片描述

验证

ll hadoop-3.2.3-src/hadoop-dist/target

这个就是编译完成的二进制包

在这里插入图片描述
把它解压一下

cp hadoop-3.2.3.tar.gz ~/
tar xzvf hadoop-3.2.3.tar.gz
cd hadoop-3.2.3
bin/hadoop checknative

可以看到 zlib,zstd,snappy,lz4,bzip2,isa-l 都已经绑定到 native 库

在这里插入图片描述

踩坑总结

  1. 磁盘空间不够

在这里插入图片描述
解决:最好预定 3-4 G 的磁盘空间

  1. 国内 maven 镜像没有 亚马逊的依赖

在这里插入图片描述
解决:下载亚马逊的依赖 jar 包,然后 maven 手动安装到本地仓库

  1. protobuff 版本不对

在这里插入图片描述
解决:hadoop 3.2.3 对应的 protobuff 版本是 2.5.0

  1. snappy 没安装成功

在这里插入图片描述
解决:这个错误主要针对 snappy 的二进制安装,没有将 snappy 的头文件移动到 /usr/include 中。这里要将 snappy 二进制包中的 snappy-c.h 移动到 /usr/include

搞定,希望能给个赞。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值