七万号·数据平台实战手记

Back

明朗北街七万号·数研工坊|扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地


适用场景#

如果你属于以下任一种情况,这篇对你有用:

  • 内网环境要装任何 Java 系组件(Flink、Spark、SeaTunnel、Doris、各类微服务)
  • 服务器上需要同时存在多个 JDK 版本(不同组件对版本要求不同)
  • 刚装完系统,准备开始搭建数据平台(第 4 篇 GCC 之后)
  • 遇到 java: command not foundUnsupportedClassVersionError

应用范围: 几乎所有大数据组件都运行在 JVM 上。JDK 装不对、环境变量配不好,后面 Flink/Spark/SeaTunnel 全部启动不起来。这是数据平台的第零号前置。


一、问题#

装好了系统,编译好了 GCC,接下来要装 Java 系组件。但:

java -version
# bash: java: command not found
plaintext

JDK 从哪来?怎么装?装哪个版本?配哪些环境变量?——在内网环境,每一步都有讲究。

二、约束#

  • 无公网,无法用 apt install openjdk 或从 Oracle 官网下载
  • 不同组件对 JDK 版本要求不同(Flink 1.14 要 Java 8/11,SeaTunnel 2.x 要 Java 8+,Doris 用 Java 8)
  • 内网环境通常要长期维护,JDK 不能随意升级
  • ARM 架构机器需要对应版本的 JDK

三、JDK 版本选择#

3.1 版本选哪个?#

组件推荐 JDK
Flink 1.14+Java 8 / 11
Spark 3.xJava 8 / 11 / 17
SeaTunnel 2.xJava 8+
DorisJava 8(JDK 8 最稳)
Elasticsearch 7.xJava 8 / 11
Kafka 3.xJava 8 / 11
自研 Spring Boot 服务Java 8 / 17 / 21

内网环境建议:优先 JDK 8,兼容性最好。 大数据组件对 Java 8 的支持最成熟。如果你有明确的新版本需求(如 Spring Boot 3 强制 Java 17+),再单独装 17。

版本选择逻辑:先看组件要求,再定 JDK,而不是先装最新 JDK。

3.2 下载哪个发行版?#

内网环境建议用 Eclipse Temurin(Adoptium)OpenJDK

# Temurin JDK 8 (x86_64)
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz

# Temurin JDK 11 (x86_64)
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/11/jdk/x64/linux/OpenJDK11U-jdk_x64_linux_hotspot_11.0.23_9.tar.gz

# ARM64 (aarch64) 版本:把路径中的 x64 换成 aarch64
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/8/jdk/aarch64/linux/OpenJDK8U-jdk_aarch64_linux_hotspot_8u412b08.tar.gz
plaintext

清华 TUNA 有 Adoptium 的完整镜像,路径规律:/Adoptium/<版本>/jdk/<架构>/linux/<文件名>。 记住:架构后缀(x64 / aarch64)必须和服务器 CPU 匹配,否则启动直接报错。

四、离线安装 JDK#

4.1 推荐方式:tar.gz 解压(不用 rpm)#

rpm 安装的 JDK 会把文件散落到系统目录,不易管理。tar.gz 解压到统一目录,多版本共存更清晰:

# 创建统一目录
mkdir -p /usr/local/java

# 解压
tar xzf OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz -C /usr/local/java/

# 查看解压结果
ls /usr/local/java/
# jdk8u412-b08
plaintext

4.2 规范:使用软链接固定版本#

实际使用中经常要切换版本,用软链接把「当前版本」指到固定名字:

ln -sf /usr/local/java/jdk8u412-b08 /usr/local/java/current
plaintext

之后配置环境变量指向 current,以后升级 JDK 只需要换软链接。

五、环境变量配置#

5.1 三个必须配置的变量#

export JAVA_HOME=/usr/local/java/current
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
plaintext
  • JAVA_HOME:Java 安装根目录。很多组件(Flink、Spark、Maven)通过它找 JDK
  • PATH:让 javajavac 命令可用
  • CLASSPATH:类搜索路径。现代 Java 一般不需要手动配,但老组件可能依赖

5.2 写入全局配置(推荐)#

创建 /etc/profile.d/java.sh

cat > /etc/profile.d/java.sh << 'EOF'
export JAVA_HOME=/usr/local/java/current
export PATH=$JAVA_HOME/bin:$PATH
EOF
plaintext

这样所有用户登录都会自动加载:

source /etc/profile
java -version
# openjdk version "1.8.0_412"
plaintext

5.3 系统级 vs 用户级#

位置生效范围适用场景
/etc/profile.d/*.sh所有用户内网服务器推荐
/etc/profile所有用户(登录 shell)传统方式
~/.bashrc单个用户个人开发机
~/.bash_profile单个用户(登录 shell)macOS 习惯

内网多台机器建议统一用 /etc/profile.d/java.sh,这样所有机器配置一致,脚本化部署也方便。

六、多版本 JDK 共存#

6.1 场景#

Flink 要 Java 8,新的 Spring Boot 3 要 Java 17。共存方案:

# 两个 JDK 都解压到 /usr/local/java/
/usr/local/java/jdk8u412-b08
/usr/local/java/jdk-17.0.11

# 各自独立,通过软链接切换
ln -sf /usr/local/java/jdk8u412-b08 /usr/local/java/current   # 切到 8
ln -sf /usr/local/java/jdk-17.0.11 /usr/local/java/current    # 切到 17
plaintext

6.2 组件级指定(更精细)#

很多组件支持在启动脚本里指定 JAVA_HOME,不依赖全局变量:

# 以 Flink 为例,编辑 conf/flink-env.sh
export JAVA_HOME=/usr/local/java/jdk8u412-b08

# Spark 同理,spark-env.sh
export JAVA_HOME=/usr/local/java/jdk8u412-b08
plaintext

多版本共存的正确姿势:全局一个默认版本,组件各自指定所需版本。

七、验证与排障#

7.1 验证安装#

java -version
javac -version
echo $JAVA_HOME
plaintext

7.2 常见坑#

坑 1:java: command not found

PATH 没配好。source /etc/profile 后再试。如果还是不行,确认 /etc/profile.d/java.sh 是否被执行(ls /etc/profile.d/ 检查文件权限,需要可读)。

坑 2:UnsupportedClassVersionError

JDK 版本太低。编译用的 JDK 版本高于运行环境。解决:升级 JDK 或降级编译目标(-source 1.8 -target 1.8)。

坑 3:Error: Could not create the Java Virtual Machine

内存不够。JVM 启动时申请的内存超过机器可用内存,调小 -Xmx

坑 4:启动报 libjli.so: cannot open shared object file

少见但内网环境会遇到:JDK 解压到某个路径后目录被移动。重新解压到最终路径,或检查 $JAVA_HOME 路径是否真的存在。

坑 5:Unable to locate a Java Runtime

组件脚本找不到 JAVA_HOME。在组件配置里显式指定(6.2 节的做法)。

八、总结#

环节关键动作一句话
选版本看组件要求,别追新大数据组件默认 Java 8
下载Temurin,注意架构 x64/aarch64架构错=装不上
安装tar.gz 解压到 /usr/local/java统一目录好管理
配置/etc/profile.d/java.sh全机器统一
多版本软链接 current + 组件单独指定全局一个默认

数据平台的第零号前置,就是把这五个字搞定:JAVA_HOME 对。


本文首发于掘金 · 作者:七万号 扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地

JDK 安装与环境变量配置——每个数据平台的起点
https://realcpf.tech/blog/airgapped-jdk-env
Author 刘佳成
Published at 2026年8月1日