CentOS 8 安装 Apache SystemDS 3.4.0 指南

CentOS 8 实机实测的 Apache SystemDS 3.4.0 部署指南,覆盖 dnf 安装 OpenJDK 17、官方包下载校验、环境变量配置与单机模式线性回归验证,含 jps 工具补装、堆内存限制、常见报错处理与卸载步骤。

Apache SystemDSApache SystemDS2026/10/12

CentOS 8 安装 Apache SystemDS 3.4.0 指南

一、环境信息

本文所有命令与回显均在以下环境中实测采集,读者可按相同版本对照:

项目值
操作系统CentOS Linux 8(root 用户)
SystemDS 版本3.4.0(Apache 官方当前最新稳定版,2026-07-24 发布)
JDKOpenJDK 17.0.1(java-17-openjdk-headless,el8_5)
包管理器dnf 4.4.2
安装路径/opt/systemds-3.4.0
运行模式singlenode 单机模式(本地 Java 进程执行,不依赖集群)
包大小systemds-3.4.0-bin.tgz 约 123 MB

二、前置条件

  1. 一台 CentOS 8 服务器,具备 root 权限;
  2. 服务器可访问公网(用于访问 downloads.apache.org),本文实测直连正常;
  3. 磁盘剩余空间不低于 2 GB(安装包 123 MB,解压后约 500 MB,另需工作目录存放数据);
  4. 内存不低于 2 GB。本文将 JVM 堆限制在 256-512 MB,以适配小规格机器与演示场景;
  5. wget、curl 等基础工具随部署步骤安装。

SystemDS 3.4.0 官方要求 Java 8 及以上,实测采用系统源中的 OpenJDK 17 全流程验证通过;JDK 11 亦为常见选择。

三、版本选型说明

访问 Apache 官方下载页 https://downloads.apache.org/systemds/,当前提供的版本包括 1.2.0 至 3.4.0 多个发布线,其中 3.4.0 为最新发布版本(downloads.apache.org 仅保留当前发布线,历史版本会移至 archive.apache.org)。

3.4.0 提供两类二进制包:

包名说明
systemds-3.4.0-bin.tgzLinux 下推荐使用的 tar.gz 包(本文采用)
systemds-3.4.0-bin.zipWindows 常用的 zip 包
systemds-3.4.0-javadoc.jarAPI 文档包

每个包均附带 .sha512、.sha1、.md5 校验文件与 .asc 签名文件,生产环境建议至少完成 sha512 校验。

需要注意两点:其一,3.4.0 解压后的顶层目录名为 systemds-3.4.0-bin,与旧版本惯例不同,需统一重命名(见 4.4 节);其二,CentOS 8 的 java-17-openjdk-headless 包不含 jps 工具,若需按本文 4.8 节验证 JVM 进程参数,需另行安装 java-17-openjdk-devel(见 4.2 节)。

四、部署步骤

4.1 安装基础工具

以 root 执行:

dnf install -y curl wget

实测回显(节选):

Dependencies resolved.
Complete!

4.2 安装 OpenJDK 17

dnf install -y java-17-openjdk-headless

实测回显(节选,列出部分关键依赖包):

Installing:
 java-17-openjdk-headless      x86_64      1:17.0.1.0.12-2.el8_5
Complete!

验证版本:

java -version

实测回显:

openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing)

确认 JDK 安装路径:

ls -d /usr/lib/jvm/java-17*

实测回显:

/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64

补装 jps 工具(CentOS 8 的 headless 包不含 jps,位于 devel 包中):

dnf install -y java-17-openjdk-devel

实测回显(节选):

Complete!
jps -V

实测回显:

1164 systemds-3.4.0.jar
1288 Jps

4.3 下载官方二进制包并校验

cd /tmp
wget https://downloads.apache.org/systemds/3.4.0/systemds-3.4.0-bin.tgz

实测回显(节选):

--2026-10-12 05:38:00--  https://downloads.apache.org/systemds/3.4.0/systemds-3.4.0-bin.tgz
HTTP request sent, awaiting response: 200 OK
Length: 129291520 (123M) [application/x-gzip]
Saving to: 'systemds-3.4.0-bin.tgz'
systemds-3.4.0-bin.tgz      100%[===============================>] 123.32M  10.9MB/s  in 25s
'/tmp/systemds-3.4.0-bin.tgz' saved [129291520/129291520]

校验 sha512(与官方 .sha512 文件逐字比对):

sha512sum /tmp/systemds-3.4.0-bin.tgz

实测回显:

f6dd2fed83d5480558a6a778dbbff1c5034c77399d39f5f5e24a49416e78fb47fe4bd850f067b3ae8b5f3bf90fa244d29b419f70e197e77e77c6172c1e865868  /tmp/systemds-3.4.0-bin.tgz
curl -s https://downloads.apache.org/systemds/3.4.0/systemds-3.4.0-bin.tgz.sha512

实测回显(两者一致即校验通过):

f6dd2fed83d5480558a6a778dbbff1c5034c77399d39f5f5e24a49416e78fb47fe4bd850f067b3ae8b5f3bf90fa244d29b419f70e197e77e77c6172c1e865868  /tmp/systemds-3.4.0-bin.tgz

4.4 解压到 /opt 并统一目录名

tar -xzf /tmp/systemds-3.4.0-bin.tgz -C /opt/

3.4.0 解压后的顶层目录为 systemds-3.4.0-bin,重命名为标准目录:

mv /opt/systemds-3.4.0-bin /opt/systemds-3.4.0

查看目录结构:

ls /opt/systemds-3.4.0/

实测回显:

LICENSE
NOTICE
README.md
bin
conf
lib
scripts
systemds-3.4.0.jar

各子目录用途:

路径用途
bin/systemds命令行启动脚本(唯一可执行入口)
conf/SystemDS-config.xml默认配置文件
conf/log4j.properties日志配置
lib/依赖库(含内置的 hadoop 相关库)
scripts/官方 DML 算法与工具脚本(builtin 线性回归、utils 数据生成等)
systemds-3.4.0.jar主程序 jar 包

4.5 配置环境变量

创建 profile 片段(root 登录后自动加载):

cat > /etc/profile.d/systemds.sh << 'EOF'
export SYSTEMDS_ROOT=/opt/systemds-3.4.0
export SYSTEMDS_JAR_FILE=/opt/systemds-3.4.0/systemds-3.4.0.jar
export SYSTEMDS_STANDALONE_OPTS="-Xms256m -Xmx512m"
export PATH=$SYSTEMDS_ROOT/bin:$PATH
EOF

三个变量的作用:

变量作用
SYSTEMDS_ROOT安装根目录,systemds 脚本据此定位 jar、conf、scripts
SYSTEMDS_JAR_FILE显式指定主 jar 路径,可规避 3.4.0 启动脚本查找 jar 的缺陷(见 4.6)
SYSTEMDS_STANDALONE_OPTS传给 JVM 的参数,此处将堆内存限定为初始 256 MB、最大 512 MB

使配置生效并验证:

source /etc/profile.d/systemds.sh
echo $SYSTEMDS_ROOT
which systemds

实测回显:

/opt/systemds-3.4.0
/opt/systemds-3.4.0/bin/systemds

4.6 首次运行验证

编写一个最简 DML 脚本(DML 是 SystemDS 的类 R 语言脚本):

echo 'print("hello systemds on centos");' > /tmp/hello.dml
systemds -f /tmp/hello.dml

实测回显(节选):

#  SYSTEMDS_ROOT= /opt/systemds-3.4.0
#  SYSTEMDS_JAR_FILE= /opt/systemds-3.4.0/systemds-3.4.0.jar
#  SYSDS_EXEC_MODE= singlenode
#  CONFIG_FILE= -config /opt/systemds-3.4.0/conf/SystemDS-config.xml
#  LOG4JPROP= -Dlog4j.configuration=file:/opt/systemds-3.4.0/conf/log4j.properties
#  HADOOP_HOME= /opt/systemds-3.4.0/lib/hadoop
#
WARNING: Using incubator modules: jdk.incubator.vector
26/10/12 05:38:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform, using builtin-java classes where applicable
hello systemds on centos
SystemDS Statistics:
Total execution time:           0.013 sec.

输出中出现 hello systemds on centos 即安装成功。两条 WARN 属正常现象:incubator 提示来自 Java 17 向量模块;NativeCodeLoader 警告表示使用内置 Java 类代替本地 hadoop 库,不影响单机模式。

若此处出现 Error: Unable to access jarfile org.apache.sysds.api.DMLScript,说明未设置 SYSTEMDS_JAR_FILE,这是 3.4.0 启动脚本在已安装目录下查找 jar 时的一个缺陷,按 4.5 节补上该变量并重新 source 即可。

4.7 运行官方脚本完成线性回归验证

创建工作目录,先使用官方 scripts/utils/generateData.dml 生成 1000 行 x 10 列的模拟数据:

mkdir -p /opt/systemds-work
systemds -f $SYSTEMDS_ROOT/scripts/utils/generateData.dml -nvargs R=1000 C=10 S=1.0 Min=0.0 Max=10.0 Pdf=normal Path=/opt/systemds-work/X.csv Fmt=csv

实测回显(节选):

SystemDS Statistics:
Total execution time:           0.163 sec.
wc -l /opt/systemds-work/X.csv

实测回显:

1000 /opt/systemds-work/X.csv

编写脚本生成带真值系数的标签 y(真实权重为 2.5、1.5、3.0、0.0、1.0、2.0、0.5、1.2、0.8、1.1,截距 5.0,附加噪声):

cat > /opt/systemds-work/genY.dml << 'EOF'
X = read("/opt/systemds-work/X.csv");
w = matrix("2.5 1.5 3.0 0.0 1.0 2.0 0.5 1.2 0.8 1.1", rows=10, cols=1);
y = X %*% w + 5.0 + rand(rows=nrow(X), cols=1, min=-1, max=1, pdf="uniform");
write(y, "/opt/systemds-work/y.csv", format="csv");
print("y generated, rows=" + nrow(y));
EOF
systemds -f /opt/systemds-work/genY.dml

实测回显(节选):

y generated, rows=1000
Total execution time:           0.234 sec.

编写训练脚本,调用官方内置的 lm(线性回归)函数:

cat > /opt/systemds-work/train.dml << 'EOF'
X = read("/opt/systemds-work/X.csv");
y = read("/opt/systemds-work/y.csv");
B = lm(X=X, y=y, icpt=1);
write(B, "/opt/systemds-work/B.csv", format="csv");
print("=== learned coefficients ===");
print(toString(B));
EOF
systemds -f /opt/systemds-work/train.dml

实测回显(节选):

Calling the Direct Solver
=== learned coefficients ===
2.513
1.508
3.001
0.001
0.993
1.974
0.509
1.204
0.810
1.103
4.927

SystemDS Statistics:
Total execution time:           0.313 sec.

学到的 10 个系数与截距 4.927 与真值高度吻合(数据含噪声存在小偏差属正常),说明 SystemDS 在 256-512 MB 堆限制下可完整完成训练流程。

4.8 验证 JVM 堆内存限制

SYSTEMDS_STANDALONE_OPTS 是修改堆内存的唯一入口(脚本内默认值为 -Xmx4g -Xms4g -Xmn400m,被环境变量覆盖)。运行一个耗时较长的数据生成任务,同时在另一终端采集进程参数:

systemds -f $SYSTEMDS_ROOT/scripts/utils/generateData.dml -nvargs R=800000 C=20 S=1.0 Min=0.0 Max=10.0 Pdf=normal Path=/opt/systemds-work/bigX.csv Fmt=csv

任务运行期间执行:

jps -v | grep -i systemds

实测回显(节选):

1370 systemds-3.4.0.jar -Xms256m -Xmx512m --add-modules=jdk.incubator.vector --add-opens=java.base/java.nio=ALL-UNNAMED -Dlog4j.configuration=file:/opt/systemds-3.4.0/conf/log4j.properties
ps -ef | grep "[j]ava -Xms256m"

实测回显(节选,仅保留一行):

root      1370     1  99 05:40 ?  00:00:06 java -Xms256m -Xmx512m --add-modules=jdk.incubator.vector --add-opens=java.base/java.nio=ALL-UNNAMED -Dlog4j.configuration=file:/opt/systemds-3.4.0/conf/log4j.properties -jar /opt/systemds-3.4.0/systemds-3.4.0.jar -w 9090 -config /opt/systemds-3.4.0/conf/SystemDS-config.xml

-Xms256m -Xmx512m 明确出现在命令行中,堆限制生效。同时每次运行日志都会打印内存预算调整提示:

26/10/12 05:38:20 WARN utils.SettingsChecker: Low memory budget of total:     31 GB set to:    512 MB

五、配置说明

5.1 环境变量配置

全部环境变量集中在 /etc/profile.d/systemds.sh,逐项说明:

变量实测值说明
SYSTEMDS_ROOT/opt/systemds-3.4.0安装根目录
SYSTEMDS_JAR_FILE/opt/systemds-3.4.0/systemds-3.4.0.jar显式指定主 jar,规避脚本缺陷
SYSTEMDS_STANDALONE_OPTS-Xms256m -Xmx512mJVM 堆参数,256-512 MB 适配小内存机器
PATH前置 $SYSTEMDS_ROOT/bin免去每次输入完整路径

若需调整堆内存,直接编辑 /etc/profile.d/systemds.sh 中 SYSTEMDS_STANDALONE_OPTS 一行,重新 source 后用 4.8 节方法验证。

5.2 配置文件位置

文件路径用途
SystemDS 配置/opt/systemds-3.4.0/conf/SystemDS-config.xml临时目录、并行度、codegen、压缩线性代数等参数
日志配置/opt/systemds-3.4.0/conf/log4j.properties日志级别与输出格式

运行时可通过 -config <文件路径> 参数指定自定义配置文件,例如:

systemds -f /opt/systemds-work/train.dml -config /opt/systemds-work/my-config.xml

六、注意事项

  1. 3.4.0 的 bin/systemds 脚本在已安装目录下查找 jar 时存在引号处理缺陷,务必设置 SYSTEMDS_JAR_FILE 环境变量,或在脚本第一参数位置显式传入 jar 完整路径(如 systemds /opt/systemds-3.4.0/systemds-3.4.0.jar -f x.dml);
  2. 解压目录默认带 -bin 后缀,建议按 4.4 节重命名,否则 SYSTEMDS_ROOT 相关配置与本文不一致;
  3. CentOS 8 的 java-17-openjdk-headless 不含 jps,需按 4.2 节安装 java-17-openjdk-devel 后才能用 jps 验证进程参数;
  4. SystemDS 单机模式每条命令都是前台进程,运行结束即退出,无常驻服务,因此无需注册 systemd 服务;
  5. 默认堆配置为 4 GB,小内存机器务必覆盖 SYSTEMDS_STANDALONE_OPTS,否则 JVM 启动即申请 4 GB 虚拟内存;
  6. 官方 algorithms 目录下的 Univar-Stats.dml 需要配套的 2xN 类型矩阵与 .mtd 元数据文件,直接仅传 X 参数会报错。

七、常见问题

Q1:运行报 Error: Unable to access jarfile org.apache.sysds.api.DMLScript,如何解决?

这是 3.4.0 启动脚本在查找 jar 文件时的缺陷导致 jar 路径为空。解决办法:在 /etc/profile.d/systemds.sh 中增加一行 export SYSTEMDS_JAR_FILE=/opt/systemds-3.4.0/systemds-3.4.0.jar,重新 source 后即可;也可每次运行时显式传入 jar 路径。

Q2:命令行输入 jps 提示 command not found 怎么办?

CentOS 8 的 java-17-openjdk-headless 包不含 jps 工具,执行 dnf install -y java-17-openjdk-devel 补装即可,装完 jps 位于 /usr/lib/jvm/java-17-openjdk/bin/ 下并已在 PATH 中。

Q3:日志中的 WARN utils.SettingsChecker: Low memory budget 提示是什么意思?

SystemDS 启动时按堆大小计算内部内存预算,检测到堆较小(如 512 MB)时会打印该提示并自动收缩预算,属于正常行为,说明堆限制已生效。

Q4:运行官方 Univar-Stats.dml 报 The parameter $STATS either needs to be passed 是什么原因?

该脚本除输入矩阵 X 外还需命名参数 TYPES(2xN 类型矩阵,第一行是类型码、第二行是列 ID,需配套 .mtd 元数据文件)与 STATS(输出路径),三者缺一不可。

Q5:直接运行 java -jar systemds-3.4.0.jar 报 NoClassDefFoundError: jdk/incubator/vector/DoubleVector 怎么办?

绕过启动脚本直连 java 时必须手动带上模块参数:java -Xms256m -Xmx512m --add-modules=jdk.incubator.vector -jar /opt/systemds-3.4.0/systemds-3.4.0.jar -f your.dml -exec singlenode。启动脚本已内置该参数,优先使用 systemds 命令。

八、卸载方式

按以下顺序清理(SystemDS 无服务进程,先确认无运行中的 java 任务):

ps -ef | grep "[s]ystemds"

无输出即无运行任务。随后执行工作目录清理、删除安装目录、删除环境变量与安装包:

java -jar /opt/systemds-3.4.0/systemds-3.4.0.jar -clean
rm -rf /opt/systemds-3.4.0 /opt/systemds-work /opt/systemds-tmp
rm -f /etc/profile.d/systemds.sh /tmp/systemds-3.4.0-bin.tgz

-clean 会清理 SystemDS 的工作目录(本地临时缓存,默认 /tmp/systemds)。验证卸载干净:

ls /opt/ | grep -i systemds

无输出即卸载完成。

九、参考链接

  1. Apache SystemDS 官方下载页:https://downloads.apache.org/systemds/
  2. Apache SystemDS 官网:https://systemds.apache.org/
  3. 官方文档(DML 语言参考):https://systemds.apache.org/docs/
  4. 官方 GitHub 仓库:https://github.com/apache/systemds
  5. 历史版本归档:https://archive.apache.org/dist/systemds/