解读-开启Hadoop下ISAL-L和PMDK功能
# 一、背景与问题
在 Hadoop 默认构建包中,ISAL(Intel Storage Acceleration Library)、PMDK(Persistent Memory Development Kit) 和 ZSTD(Zstandard 压缩库) 往往是关闭状态,这会影响数据压缩、解压及内存操作的效率。
根据群友用户反馈,在执行 hadoop checknative
时,经常看到这些功能显示为 false
或 not available
:
实际安装时,也可能遇到功能库缺失的提示:
# 二、解决思路
要让这些特性在 Hadoop 中可用,必须在源码编译阶段显式开启相关编译参数,并且确保构建机已安装对应的开发库文件。
这样,Hadoop 的 native
模块在编译时就会检测到依赖并启用支持,生成的 tarball 和安装包安装后功能即为 true
。
# 三、编译环境准备(Rocky 8.10 示例)
# 3.1 处理 Hadoop 3.3.4 的 OpenSSL 低版本 API 问题
高版本系统需源码适配
在 Rocky Linux 8.10 中,OpenSSL 默认是 3.x,不再提供 1.1.x API,也不建议降级。
因此,必须在源码中适配新旧 API,避免 EVP_CIPHER_CTX_block_size
相关报错。
具体解决方案可参考:EVP_CIPHER_CTX_block_size 报错解决
# 3.2 安装 Rocky 必备依赖包
在正式构建 Hadoop 前,建议先安装以下依赖,确保编译链路完整:
dnf install -y \
isa-l-devel \
libpmem-devel \
libpmemobj-devel \
protobuf-compiler \
python3-pip \
pkgconf \
m4 \
autoconf-archive \
libzip-devel \
sharutils \
libgsasl-devel \
libzstd-devel
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
依赖说明:
- isa-l-devel:Intel Storage Acceleration Library(压缩加速库)
- libpmem-devel / libpmemobj-devel:持久化内存开发套件
- libzstd-devel:Zstandard 压缩库
- snappy-devel:Snappy 压缩库(Hadoop 默认依赖)
- protobuf 系列:包含 Protobuf 编译器和开发库
提示
完整 Rocky 8.10 构建环境包可参考本站 Rocky 编译环境准备 章节。
# 3.3 启用 OpenSSL + Snappy + ISA-L + PMDK + Zstd 的完整环境
# 四、完整编译命令
在 Hadoop 源码根目录执行:
mvn \
-Dsnappy.prefix=x \
-Dbundle.snappy=true \
-Dsnappy.lib=/usr/lib64 \
-Pdist -Pnative -Psrc -Pyarn-ui -Dtar \
-Dzookeeper.version=3.5.9 \
-Dleveldbjni.group=org.fusesource.leveldbjni \
-DskipTests -DskipITs \
-Drequire.openssl=true \
-Drequire.isal=true \
-Drequire.pmdk=true \
-DProtobuf_PROTOC_EXECUTABLE=/usr/bin/protoc \
-DProtobuf_LIBRARY=/usr/lib64/libprotobuf.so \
-DProtobuf_LITE_LIBRARY=/usr/lib64/libprotobuf-lite.so \
-DProtobuf_PROTOC_LIBRARY=/usr/lib64/libprotoc.so \
-Drequire.zstd=true \
install \
-Divy.home=/root/.ivy2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
参数说明:
参数 | 作用 |
---|---|
-Pnative | 启用 Hadoop 原生库构建 |
-Drequire.isal=true | 强制检测并启用 ISAL |
-Drequire.pmdk=true | 强制检测并启用 PMDK |
-Drequire.zstd=true | 强制检测并启用 ZSTD |
-Drequire.openssl=true | 启用 OpenSSL 加密 |
-Dbundle.snappy=true | 将 Snappy 静态打包到 Hadoop 中 |
Protobuf 系列参数 | 指定 Protobuf 编译器及库路径,避免找不到依赖 |
# 五、编译结果验证
安装打包好的 Hadoop 后,运行:
# 安装后执行
hadoop checknative -a
# hadoop-dist 文件可以直接使用这个命令
./bin/hadoop jar share/hadoop/common/hadoop-common-3.3.4.jar org.apache.hadoop.util.NativeLibraryChecker -a
1
2
3
4
5
2
3
4
5
如输出结果中 zstd
, isal
, pmdk
都显示为 true,说明已成功启用:
- 01
- [/metrics/aggregated] — 聚合数据范围 检查点09-19
- 02
- [/metrics] — 反向分析接口参数 请求抓包09-17
- 03
- [/metrics] — 普通指标写入方法 POST09-17