Apache StreamPark 2.1.7 安装指南
Apache StreamPark 2.1.7 安装指南:在 Ubuntu 22.04 从零安装,含 MySQL 8.0 前置、元数据库初始化、config.yaml 配置、JVM 堆 256-512MB、systemd 托管与登录验证。
Apache StreamPark 2.1.7 安装指南
目标:在真实 Ubuntu 22.04 服务器上从零安装 Apache StreamPark 2.1.7(统一管理 Flink/Spark 流批作业的管理台),覆盖 OpenJDK 11 + MySQL 8.0 前置、官方 tar.gz 下载解压到 /opt/streampark、元数据库初始化、config.yaml 配置、JVM 堆 256-512MB、systemd 托管与登录验证。以下命令与回显均在 Ubuntu 22.04.5 真实环境逐步实测。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Java:OpenJDK 11.0.32.1(
openjdk-11-jdk-headless,路径/usr/lib/jvm/java-11-openjdk-amd64) - MySQL:8.0.46-0ubuntu0.22.04.4(
mysql-server,systemd 服务mysql.service) - Apache StreamPark:2.1.7(Scala 2.12 二进制包
apache-streampark_2.12-2.1.7-bin.tar.gz) - 配套 Flink(注册流作业环境用):1.19.3-bin-scala_2.12,解压至
/opt/flink - 安装目录:
/opt/streampark - 管理台端口:10000
- 运行用户:root
- 元数据库:MySQL 库
streampark(24 张表) - 工作目录(workspace):
/data/streampark/workspace
💡 说明:StreamPark 是 Apache 顶级项目,管理台(Console)是一个 Spring Boot + Undertow 的 Java 进程,元数据存 MySQL/PgSQL(默认 H2),负责作业开发、发布、运维全流程。
二、前置条件
- 一台 Ubuntu 22.04 服务器,root 权限。
- 需安装
openjdk-11-jdk-headless(含jps)、wget、tar、net-tools(含netstat)、procps,以及 MySQL 8.0(mysql-server)。 - ⚠️ StreamPark 2.1.7 通过
lib/下的 shims 支持 Flink 1.12~1.20(实测目录内含streampark-flink-shims_flink-1.12~1.20共 9 个版本)。若要用它管理 Flink 作业,需另备一份与所选 shims 版本匹配的真实 Flink 发行版(本指南以 1.19.3 为例),仅建空目录无法注册。
三、版本选型说明
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Apache StreamPark | 2.1.7 | 当前稳定版;官方发布 Scala 2.12 二进制 tar.gz |
| OpenJDK | 11 | 官方要求 Java 8/11,实测 11.0.32.1 |
| MySQL | 8.0.x | 元数据库,实测 8.0.46;也可用 5.7/PgSQL |
| Flink | 1.19.3-bin-scala_2.12 | 与内置 shims 1.19 对应(可选,作业管理用) |
| Scala | 2.12 | StreamPark 2.1.7 与 Flink 1.19.3 均基于 Scala 2.12 |
⚠️ StreamPark 包名区分 Scala 版本:
apache-streampark_2.12-2.1.7-bin.tar.gz(Scala 2.12)与apache-streampark_2.11-2.1.7-bin.tar.gz(Scala 2.11)。Flink 1.14+ 均基于 Scala 2.12,选择 2.12 包即可。
四、部署步骤
4.1 安装 OpenJDK 11 与基础工具
apt-get update -qq
DEBIAN_FRONTEND=noninteractive apt-get install -y \
openjdk-11-jdk-headless wget tar net-tools procps
实测回显(依赖已就绪时):
procps is already the newest version (2:3.3.17-6ubuntu2.1).
tar is already the newest version (1.34+dfsg-1ubuntu0.1.22.04.6).
wget is already the newest version (1.21.2-2ubuntu1.5).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
验证版本:
# java -version
openjdk version "11.0.32.1" 2026-08-18
OpenJDK Runtime Environment (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu, mixed mode, sharing)
4.2 安装并启动 MySQL 8.0
DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server
systemctl enable --now mysql
实测回显(已安装时):
mysql-server is already the newest version (8.0.46-0ubuntu0.22.04.4).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
确认服务状态与版本:
# systemctl status mysql --no-pager | head -6
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2026-10-12 16:05:34 UTC; 42min ago
Main PID: 4514 (mysqld)
Status: "Server is operational"
# mysql --version
mysql Ver 8.0.46-0ubuntu0.22.04.4 for Linux on x86_64 ((Ubuntu))
设置 root 密码(示例统一口令 q1w2e3r4)并验证登录:
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'q1w2e3r4'; FLUSH PRIVILEGES;"
mysql -uroot -pq1w2e3r4 -e "SELECT VERSION();"
实测回显:
mysql: [Warning] Using a password on the command line interface can be insecure.
VERSION()
8.0.46-0ubuntu0.22.04.4
4.3 下载并解压 Apache StreamPark
cd /opt
wget -O apache-streampark_2.12-2.1.7-bin.tar.gz \
https://downloads.apache.org/streampark/2.1.7/apache-streampark_2.12-2.1.7-bin.tar.gz
tar -xzf apache-streampark_2.12-2.1.7-bin.tar.gz
mv apache-streampark_2.12-2.1.7-bin /opt/streampark
包信息(实测):
- 包名:
apache-streampark_2.12-2.1.7-bin.tar.gz(206,362,551 字节,约 197MB) - 解压目录:
/opt/streampark(内含 bin、client、conf、lib、plugins、script、logs 等)
💡 下载慢可改用 Apache 存档镜像
https://archive.apache.org/dist/streampark/2.1.7/或国内镜像加速。
4.4 初始化元数据库(建库 + 建表 + 初始数据)
StreamPark 自带建库建表与初始化数据脚本,位于 script/ 目录:
ls /opt/streampark/script/schema/ # mysql-schema.sql pgsql-schema.sql
ls /opt/streampark/script/data/ # mysql-data.sql pgsql-data.sql
mysql-schema.sql 会自动创建数据库 streampark(utf8mb4)并建表;mysql-data.sql 写入角色、菜单、默认 admin 用户、默认团队等初始数据。依次导入:
mysql -uroot -pq1w2e3r4 < /opt/streampark/script/schema/mysql-schema.sql
mysql -uroot -pq1w2e3r4 < /opt/streampark/script/data/mysql-data.sql
实测回显(mysql 客户端以重定向导入时不逐行打印,仅提示密码告警,导入失败才会报错):
mysql: [Warning] Using a password on the command line interface can be insecure.
验证:库中存在 24 张表、默认用户与默认团队:
# mysql -uroot -pq1w2e3r4 -e "USE streampark; SHOW TABLES;" | wc -l
25 (1 行表头 + 24 张表)
# mysql -uroot -pq1w2e3r4 -e "USE streampark; SELECT user_id,username,user_type,status FROM t_user;"
user_id username user_type status
100000 admin 1 1
# mysql -uroot -pq1w2e3r4 -e "USE streampark; SELECT * FROM t_team;"
id team_name description create_time modify_time
100000 default NULL 2026-10-12 16:13:51 2026-10-12 16:13:51
4.5 配置 config.yaml
StreamPark 主配置为 /opt/streampark/conf/config.yaml。官方包默认 datasource 为 H2,改为 MySQL 需要编辑 datasource 段:
vim /opt/streampark/conf/config.yaml
关键改动(本环境实测值):
datasource:
dialect: mysql # h2, mysql, pgsql
username: root
password: q1w2e3r4
url: jdbc:mysql://localhost:3306/streampark?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
同时确认 streampark.workspace.local 指向非 APP_HOME 的安全目录(见「配置说明 5.4」):
streampark:
workspace:
local: /data/streampark/workspace
remote: hdfs:///streampark/
4.6 配置 JVM 堆内存(256-512MB)
StreamPark 管理台是 Java 进程,默认堆为 -Xms512m -Xmx1024m(bin/jvm_opts.sh),请按运维规范把堆限制在 256-512MB:
vim /opt/streampark/bin/jvm_opts.sh
将文件头部改为(实测生效值):
-server
-Xms256m
-Xmx512m
-Xmn128m
💡
bin/jvm_opts.sh中每一行-*开头的内容都会被拼进 java 启动参数;若设置了环境变量JAVA_OPTS,则优先使用环境变量、忽略该文件(例如 systemd 单元文件的Environment=中注入 JAVA_OPTS,或启动前export JAVA_OPTS="-Xms256m -Xmx512m -Xmn128m")。
4.7 启动管理台
启动脚本为 bin/streampark.sh,必须先设置 JAVA_HOME(否则报 Neither the JAVA_HOME nor the JRE_HOME environment variable is defined,见常见问题):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
/opt/streampark/bin/streampark.sh start
实测回显(节选):
[StreamPark] WARN: HADOOP_HOME is undefined on your system env,please check it.
[StreamPark] JAVA_OPTS: -Xms256m -Xmx512m -Xmn128m -XX:HeapDumpPath=/opt/streampark/logs/dump.hprof -Xloggc:/opt/streampark/logs/gc.log --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
[StreamPark] StreamPark start successful. pid: 5923
查看状态与端口监听:
# /opt/streampark/bin/streampark.sh status
[StreamPark] StreamPark is running pid is: 5923
# netstat -tlnp | grep 10000
tcp6 0 0 :::10000 :::* LISTEN 5923/java
启动日志关键行(/opt/streampark/logs/streampark.out):
INFO | main | org.springframework.boot.web.embedded.undertow.UndertowWebServer:119] Undertow started on port(s) 10000 (http)
INFO | main | org.apache.streampark.console.StreamParkConsoleBootstrap:61] Started StreamParkConsoleBootstrap in 29.435 seconds (JVM running for 31.063)
4.8 systemd 托管(开机自启)
创建 /etc/systemd/system/streampark.service(实测内容):
[Unit]
Description=Apache StreamPark Console
After=network.target mysql.service
Wants=mysql.service
[Service]
Type=forking
User=root
Group=root
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Environment=PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=APP_HOME=/opt/streampark
ExecStart=/opt/streampark/bin/streampark.sh start
ExecStop=/opt/streampark/bin/streampark.sh stop
Restart=on-failure
RestartSec=5
TimeoutStartSec=120
[Install]
WantedBy=multi-user.target
加载、启用并启动:
systemctl daemon-reload
systemctl enable streampark
systemctl start streampark
systemctl status streampark --no-pager
实测回显:
Created symlink /etc/systemd/system/multi-user.target.wants/streampark.service → /etc/systemd/system/streampark.service.
● streampark.service - Apache StreamPark Console
Loaded: loaded (/etc/systemd/system/streampark.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2026-10-12 16:48:38 UTC; 7ms ago
Process: 5815 ExecStart=/opt/streampark/bin/streampark.sh start (code=exited, status=0/SUCCESS)
Main PID: 5923 (java)
CGroup: /system.slice/streampark.service
└─5923 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -server -Xms256m -Xmx512m -Xmn128m -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError
⚠️ 每个
Environment=只写一个变量;Type=forking对应streampark.sh start的后台启动方式,systemd 跟踪的是 java 子进程。
4.9 登录验证
管理台默认账号 admin,官方默认初始密码为 streampark(本环境已按安全要求改为 q1w2e3r4,见「配置说明 5.3」)。用 REST 接口验证登录:
curl -s -X POST http://localhost:10000/passport/signin \
-d "username=admin&password=q1w2e3r4&loginType=PASSWORD"
实测回显(关键字段,返回 user 与 token 即登录成功):
{"data":{"user":{"userId":"100000","username":"admin","password":"********","userType":"ADMIN","loginType":"PASSWORD","status":"1","createTime":"2026-10-12 16:13:51","lastTeamId":"100000"},"permissions":[null,"user:view","user:add"],"token":"(登录成功后返回的 JWT,此处省略原文)","expire":"2026-10-12 18:50:52"}}
带 token 调用业务接口(注意 Authorization 头直接放 token,无 Bearer 前缀):
TOKEN=$(curl -s -X POST http://localhost:10000/passport/signin \
-d "username=admin&password=q1w2e3r4&loginType=PASSWORD" | grep -o '"token":"[^"]*"' | head -1 | sed 's/"token":"//;s/"$//')
curl -s -X POST http://localhost:10000/user/list \
-H "Authorization: $TOKEN" -H "Content-Type: application/json" -d "{}"
实测回显:
{"code":"200","data":{"records":[{"userId":"100000","username":"admin","password":null,"userType":"ADMIN","loginType":"PASSWORD","status":"1","createTime":"2026-10-12 16:13:51","nickName":"","lastTeamId":null}],"total":"1","size":"10","current":"1","pages":"1"},"status":"success"}
浏览器访问 http://<服务器IP>:10000 即可进入管理台登录页。
五、配置说明
5.1 config.yaml 关键配置项
配置文件:/opt/streampark/conf/config.yaml,YAML 格式。
| 配置项 | 本指南值 | 说明 |
|---|---|---|
server.port | 10000 | 管理台 HTTP 端口 |
server.session.ttl | 2h | 登录会话有效期(s/m/h/d 单位) |
server.undertow.threads.io/worker | 16 / 256 | Undertow IO/工作线程 |
datasource.dialect | mysql | 元数据库类型:h2/mysql/pgsql |
datasource.username/password | root / q1w2e3r4 | 数据库账号 |
datasource.url | jdbc:mysql://localhost:3306/streampark?serverTimezone=GMT%2B8 | JDBC 连接串 |
streampark.workspace.local | /data/streampark/workspace | 本地工作区(禁止放 APP_HOME 下) |
streampark.workspace.remote | hdfs:///streampark/ | 远端依赖目录(YARN 用) |
streampark.yarn.http-auth | simple | YARN 作业状态轮询鉴权 |
streampark.hadoop-user-name | hdfs | 连接 Hadoop 的用户名 |
streampark.project.max-build | 16 | 并发构建项目数上限 |
5.2 JVM 堆内存(256-512MB)
- 位置:
/opt/streampark/bin/jvm_opts.sh - 改法:将
-Xms512m/-Xmx1024m/-Xmn256m改为-Xms256m -Xmx512m -Xmn128m - 生效验证(
jps -v,JDK 自带):
# jps -v | grep StreamParkConsoleBootstrap
5923 StreamParkConsoleBootstrap -Xms256m -Xmx512m -Xmn128m -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:+IgnoreUnrecognizedVMOptions -XX:+UseGCLogFileRotation -Xloggc:/opt/streampark/logs/gc.log
💡 管理台只做作业编排与运维,本身堆无需过大;作业计算内存由 Flink/Spark 的 TaskManager/Executor 承担。systemd 托管时在
Environment=中注入 JAVA_OPTS 亦可覆盖(优先级高于 jvm_opts.sh)。
5.3 默认账号与改密
官方默认账号 admin,初始密码 streampark(script/data/mysql-data.sql 内置)。首次登录后请修改为强口令,本环境统一使用示例口令 q1w2e3r4。
修改方式:登录管理台后在「个人中心 → 修改密码」操作;或通过 SQL 直接更新(密码为 Shiro Sha256Hash(salt, password, 1024) 迭代哈希,实测算法与值):
USE streampark;
UPDATE t_user
SET salt = 'vg56lrowv354ch03dieq0byivv',
password = '3d048bd6792acb4bfd6a80fa425922d657bc5ec059c7536c175889bfe11e49c6'
WHERE username = 'admin';
⚠️ 密码哈希算法:
encrypt(salt, password)= SHA-256(salt || password) 后再迭代 1024 次,输出十六进制串;改密务必同时更新salt与password两列,否则登录失败(见常见问题 7.5)。
5.4 workspace 工作区
streampark.workspace.local 指定工作区目录,用于存放克隆/编译的项目与产物,禁止设置在 APP_HOME(/opt/streampark)下。首次启动后自动创建子目录(实测):
# ls /data/streampark/workspace/
backups client dist jars savepoints shims uploads workspace
六、注意事项
- 启动前必须设置
JAVA_HOME,否则streampark.sh直接报错退出。 streampark.sh start为后台启动(nohup),status依赖 pid 文件,JVM 崩溃后可能误报 running;排查以日志/opt/streampark/logs/streampark.out+ 端口监听为准。HADOOP_HOME is undefined仅告警,纯 Flink/本地模式可忽略;用 YARN 部署时需配置 Hadoop。- 使用 MySQL 作为元数据库时,必须把 MySQL Connector/J jar 放入
lib/(Apache 2.0 不兼容、官方包未内置,见常见问题 7.1)。 - 登录接口
loginType=PASSWORD参数必传;JSON body 方式不会报错但不会真正登录(返回无 data),请使用表单编码方式。
七、常见问题
7.1 启动报 MySQL 驱动缺失
错误回显(/opt/streampark/logs/streampark.out):
Exception in thread "main" java.lang.ExceptionInInitializerError: The datasource.dialect is MySQL, but the classes "com.mysql.cj.jdbc.Driver" and "com.mysql.jdbc.Driver" not found. Please ensure that the MySQL Connector/J is located under $streampark/lib.
Note: The MySQL Connector/J is not compatible with the Apache 2.0 license. You need to download it and place it into $streampark/lib.
at org.apache.streampark.console.base.config.SpringProperties.dataSourceConfig(SpringProperties.java:79)
定位:datasource.dialect=mysql 但 lib/ 下没有 MySQL 驱动(官方包因 Apache 2.0 许可兼容问题不内置)。
解决:下载驱动放入 lib 后重启:
wget -O /opt/streampark/lib/mysql-connector-j-8.0.33.jar \
https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar
systemctl restart streampark
7.2 报 JAVA_HOME / JRE_HOME 未定义
错误回显:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
解决:执行前设置 export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64(systemd 托管时已在单元文件 Environment= 中注入)。
7.3 启动报 workspace 路径无效
错误回显:
ERROR: streampark.workspace.local: "<path>" is an invalid path, please reconfigure in $CONFIG
NOTE: "streampark.workspace.local" should not be set under APP_HOME($APP_HOME) directory. Set it to a secure directory outside of APP_HOME.
解决:在 config.yaml 把 streampark.workspace.local 指向 APP_HOME 之外、已存在且可读写(root 属主)的目录,如 /data/streampark/workspace。
7.4 status 显示 running 但 10000 未监听
定位:pid 文件残留导致 status 误报,JVM 实际已退出。
解决:查看 /opt/streampark/logs/streampark.out 找真实异常(如 7.1 的驱动缺失),用 netstat -tlnp | grep 10000 复核,修复后 systemctl restart streampark。
7.5 改密后无法登录
定位:t_user 的 salt 与 password 未成对更新,或哈希算法不匹配(StreamPark 用 Shiro Sha256Hash 迭代 1024 次)。
解决:按 5.3 的 UPDATE 语句同时更新两列;或在管理台「修改密码」功能中重置。
八、卸载方式
systemctl stop streampark # 停止服务
systemctl disable streampark # 取消开机自启
rm -f /etc/systemd/system/streampark.service && systemctl daemon-reload
rm -rf /opt/streampark /data/streampark # 删除安装目录与工作区
mysql -uroot -pq1w2e3r4 -e "DROP DATABASE IF EXISTS streampark;" # 可选:删除元数据库
apt-get remove -y openjdk-11-jdk-headless mysql-server # 可选:卸载 JDK 与 MySQL
九、参考链接
- Apache StreamPark 官网:https://streampark.apache.org/
- 下载页:https://downloads.apache.org/streampark/
- 存档下载:https://archive.apache.org/dist/streampark/
- 官方文档:https://streampark.apache.org/docs/
- GitHub:https://github.com/apache/streampark
- Apache Flink 下载:https://archive.apache.org/dist/flink/