解读-开启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
。
# 三、编译环境准备(Ubuntu 示例)
# 3.1 处理 Hadoop 3.3.4 的 OpenSSL 低版本 API 问题
高版本系统需源码适配
在高版本系统(如 Ubuntu 22.04)中,OpenSSL 默认是 3.x,不再提供 1.1.x API,也不建议降级。
因此,必须在源码中适配新旧 API,避免 EVP_CIPHER_CTX_block_size
相关报错。
具体解决方案可参考:EVP_CIPHER_CTX_block_size 报错解决
# 3.2 安装 Ubuntu 必备依赖包
在正式构建 Hadoop 前,建议先安装以下依赖,确保编译链路完整:
sudo apt update
sudo apt install -y \
libisal-dev \
libpmem-dev \
libzstd-dev \
libsnappy-dev \
protobuf-compiler \
libprotobuf-dev
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
依赖说明:
- libisal-dev:Intel Storage Acceleration Library(压缩加速库)
- libpmem-dev:持久化内存开发套件
- libzstd-dev:Zstandard 压缩库
- libsnappy-dev:Snappy 压缩库(Hadoop 默认依赖)
- protobuf 系列:包含 Protobuf 编译器和开发库
提示
其他 Hadoop 构建依赖(如 Maven、OpenSSL、CMake 等)可参考本站 Ubuntu 编译环境准备 章节。
# 3.3 启用 OpenSSL + Snappy + ISA-L + PMDK + Zstd 的完整环境
# 四、完整编译命令
在 Hadoop 源码根目录执行:
mvn \
-Dsnappy.prefix=x \
-Dbundle.snappy=true \
-Dsnappy.lib=/usr/lib/x86_64-linux-gnu \
-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/lib/x86_64-linux-gnu/libprotobuf.so \
-DProtobuf_LITE_LIBRARY=/usr/lib/x86_64-linux-gnu/libprotobuf-lite.so \
-DProtobuf_PROTOC_LIBRARY=/usr/lib/x86_64-linux-gnu/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 编译器及库路径,避免找不到依赖 |
在一台 4 核 8GB 内存的构建机上,全流程约 45 分钟 完成。
# 五、编译结果验证
安装打包好的 Hadoop 后,运行:
hadoop checknative -a
1
如输出结果中 zstd
, isal
, pmdk
都显示为 true,说明已成功启用:
- 01
- [/metrics/aggregated] — 聚合数据范围 检查点09-19
- 02
- [/metrics] — 反向分析接口参数 请求抓包09-17
- 03
- [/metrics] — 普通指标写入方法 POST09-17