TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装教程
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装教程
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)
  • Hadoop

    • /usr/bin/env: python3: No such file or directory 问题
    • error triple-beam@1.4.1: The engine "node" is incompatible with this module 错误
    • CMake 3.1 or higher is required. You are running version 2.8.12.2 错误
    • fuse is needed by hadoop_3_2_0-3.3.4-1.el7.x86_64 错误
    • Cyrus SASL/GSASL 缺失解决
    • Protobuf PROTOC LIBRARY NOTFOUND
    • EVP CIPHER CTX block size 报错
      • 1. 报错背景与现象
      • 2. 问题原因分析
      • 3. 解决方案思路
      • 4. 补丁 diff
  • Spark

  • Trino

  • Hudi

  • Paimon

  • Livy

  • Flink

  • Atlas

  • Superset

  • Jsvc

  • Zookeeper

  • Hive

  • Sqoop

  • Cloudbeaver

  • Bigtop-select

  • 报错解决-Bigtop
  • Hadoop
JaneTTR
2025-08-15
目录

EVP CIPHER CTX block size 报错

# 1. 报错背景与现象

在编译完成后执行如下命令:

hadoop checknative -a
1

输出日志中可见:

25/08/13 05:51:30 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
25/08/13 05:51:30 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
25/08/13 05:51:30 WARN erasurecode.ErasureCodeNative: ISA-L support is not available in your platform... using builtin-java codec where applicable
25/08/13 05:51:30 INFO nativeio.NativeIO: The native code was built without PMDK support.
Native library checking:
hadoop:  true /usr/bigtop/3.2.0/usr/lib/hadoop/lib/native/libhadoop.so.1.0.0
zlib:    true /lib/x86_64-linux-gnu/libz.so.1
zstd  :  false
bzip2:   true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false EVP_CIPHER_CTX_block_size
ISA-L:   false libhadoop was built without ISA-L support
PMDK:    false The native code was built without PMDK support.
25/08/13 05:51:30 INFO util.ExitUtil: Exiting with status 1: ExitException
1
2
3
4
5
6
7
8
9
10
11
12
13

关键问题点: openssl: false EVP_CIPHER_CTX_block_size

# 2. 问题原因分析

该问题出现在 Hadoop 3.3.4 的源码文件:

hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/crypto/OpensslCipher.c
1

在旧版本 OpenSSL(1.1.x)中,EVP_CIPHER_CTX_block_size 可以直接使用,但在 OpenSSL 3.x 环境下该符号已被替换为:

  • EVP_CIPHER_CTX_get_block_size
  • EVP_CIPHER_CTX_is_encrypting

直接调用旧符号会导致 dlsym 查找失败,从而触发 checknative 检测 openssl=false。

# 3. 解决方案思路

  • 在原始动态加载代码基础上,引入一个 load_sym2 方法,优先加载 OpenSSL 3.x 符号,找不到再回退到 OpenSSL 1.1.x 符号。
  • 对 EVP_CIPHER_CTX_block_size 和 EVP_CIPHER_CTX_encrypting 两个函数分别处理,确保兼容新旧版本 API。

执行结果截图

源码位置截图

# 4. 补丁 diff

以下为经过修改的 diff 文件,应用后重新编译即可解决:

Subject: [PATCH] meta:处理openssl
---
Index: hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/crypto/OpensslCipher.c
===================================================================
+#include <dlfcn.h>  /* for dlopen/dlsym/dladdr */
+
+/* 优先尝试 OpenSSL 3 符号,找不到再回退到 OpenSSL 1.1 符号 */
+static void *load_sym2(void *handle, const char *name_new, const char *name_old) {
+  void *p = dlsym(handle, name_new);
+  if (!p) p = dlsym(handle, name_old);
+  return p;
+}
...
-  LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_block_size, env, openssl,  \
-                      "EVP_CIPHER_CTX_block_size");
+
+  /* OpenSSL 3: EVP_CIPHER_CTX_block_size -> EVP_CIPHER_CTX_get_block_size */
+  dlsym_EVP_CIPHER_CTX_block_size =
+      (int (*)(const EVP_CIPHER_CTX *)) load_sym2(openssl,
+          "EVP_CIPHER_CTX_get_block_size", "EVP_CIPHER_CTX_block_size");
+  if (!dlsym_EVP_CIPHER_CTX_block_size) {
+    THROW(env, "java/lang/UnsatisfiedLinkError",
+          "Missing EVP_CIPHER_CTX_(get_)block_size");
+    return;
+  }
...
-  LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_encrypting, env, openssl,  \
-                      "EVP_CIPHER_CTX_encrypting");
+
+  /* OpenSSL 3: EVP_CIPHER_CTX_encrypting -> EVP_CIPHER_CTX_is_encrypting */
+  dlsym_EVP_CIPHER_CTX_encrypting =
+      (int (*)(const EVP_CIPHER_CTX *)) load_sym2(openssl,
+          "EVP_CIPHER_CTX_is_encrypting", "EVP_CIPHER_CTX_encrypting");
+  if (!dlsym_EVP_CIPHER_CTX_encrypting) {
+    THROW(env, "java/lang/UnsatisfiedLinkError",
+          "Missing EVP_CIPHER_CTX_(is_)encrypting");
+    return;
+  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#Hadoop#HDFS#OpenSSL#编译适配#Ubuntu22.04
Protobuf PROTOC LIBRARY NOTFOUND
evaluate,httr2,knitr 包不存在解决办法

← Protobuf PROTOC LIBRARY NOTFOUND evaluate,httr2,knitr 包不存在解决办法→

最近更新
01
[/metrics/aggregated] — 聚合数据范围 检查点
09-19
02
[/metrics] — 反向分析接口参数 请求抓包
09-17
03
[/metrics] — 普通指标写入方法 POST
09-17
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式