目录
为什么要编译 native 库安装工具包安装 zlib,bzip2,lz4安装 openssl安装 JDK8,maven安装 cmake安装 protobuf安装 snappy安装 zstd安装 isa-l安装 aws-DynamoDBLocal 包安装 aws-java-sdk-bundle 包编译 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,插入以下内容:
设置环境变量 在 /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 库
踩坑总结
磁盘空间不够
解决:最好预定 3-4 G 的磁盘空间
国内 maven 镜像没有 亚马逊的依赖
解决:下载亚马逊的依赖 jar 包,然后 maven 手动安装到本地仓库
protobuff 版本不对
解决:hadoop 3.2.3 对应的 protobuff 版本是 2.5.0
snappy 没安装成功
解决:这个错误主要针对 snappy 的二进制安装,没有将 snappy 的头文件移动到 /usr/include 中。这里要将 snappy 二进制包中的 snappy-c.h 移动到 /usr/include
搞定,希望能给个赞。
发表评论