Apache StreamPark 2.1.7 安装指南

Apache StreamPark 2.1.7 安装指南:在 Ubuntu 22.04 从零安装,含 MySQL 8.0 前置、元数据库初始化、config.yaml 配置、JVM 堆 256-512MB、systemd 托管与登录验证。

Apache StreamParkApache StreamPark2026/10/13

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 StreamPark2.1.7当前稳定版;官方发布 Scala 2.12 二进制 tar.gz
OpenJDK11官方要求 Java 8/11,实测 11.0.32.1
MySQL8.0.x元数据库,实测 8.0.46;也可用 5.7/PgSQL
Flink1.19.3-bin-scala_2.12与内置 shims 1.19 对应(可选,作业管理用)
Scala2.12StreamPark 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.port10000管理台 HTTP 端口
server.session.ttl2h登录会话有效期(s/m/h/d 单位)
server.undertow.threads.io/worker16 / 256Undertow IO/工作线程
datasource.dialectmysql元数据库类型:h2/mysql/pgsql
datasource.username/passwordroot / q1w2e3r4数据库账号
datasource.urljdbc:mysql://localhost:3306/streampark?serverTimezone=GMT%2B8JDBC 连接串
streampark.workspace.local/data/streampark/workspace本地工作区(禁止放 APP_HOME 下)
streampark.workspace.remotehdfs:///streampark/远端依赖目录(YARN 用)
streampark.yarn.http-authsimpleYARN 作业状态轮询鉴权
streampark.hadoop-user-namehdfs连接 Hadoop 的用户名
streampark.project.max-build16并发构建项目数上限

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

九、参考链接