CentOS 8 安装 Apache Texera 指南

在 CentOS 8 上从零安装 Apache Texera 1.2.0-incubating,覆盖 EOL 后归档源修复、JDK 17 与 PostgreSQL 初始化、jOOQ 生成、前后端编译打包与官方发行包校验,命令与回显均实测通过

Apache TexeraApache Texera2026/10/15

CentOS 8 安装 Apache Texera 指南

目标:在 CentOS 8 上从零搭建 Apache Texera 1.2.0-incubating 的运行环境,解决系统 EOL 后软件源失效、PostgreSQL 初始化等实测陷阱,走通「源码构建 → 数据库初始化 → stage 打包 → 服务启动 → API 验证」全链路。本文全部命令与回显均已在 CentOS Linux 8 实测通过。

CentOS 8 已于 2021 年 12 月 31 日停止维护,官方镜像站已下线,安装的第一步是修复软件源;随后与任何发行版一样,Texera 的安装本质是「JDK 17 + Node 24 + sbt 三件套 → PostgreSQL 初始化 → jOOQ 生成 → 前后端编译打包 → 启动验证」。本文方案 A 为源码构建(推荐),方案 B 为官方 src 发行包,两者均实测。

一、环境信息

本节固定可复现的基线环境,后续命令均在此环境执行:

  • 操作系统:CentOS Linux 8(镜像仓库归档版本 8.5.2111)
  • 架构:x86_64
  • JDK:OpenJDK 17.0.1(el8 vault 包 java-17-openjdk-devel,2021-10-19 LTS)
  • Node.js:v24.10.0(官方 tarball)
  • 构建工具:sbt 1.12.9(sbt-launch 方式)
  • 数据库:PostgreSQL 10.17(el8 vault 包 postgresql-server)
  • 组件版本:Apache Texera 1.2.0-incubating
  • 实测目录:/work/texera-ce(源码树)、/opt/texera-pkg(发行包)

系统确认(实时回显):

cat /etc/os-release | head -2
NAME="CentOS Linux"
VERSION="8"
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)

💡 说明:el8 仓库提供的 JDK 17 是 17.0.1(比 Ubuntu 22.04 的 17.0.20 旧)。Texera 1.2.0 的 sbt 1.12.9 工具链在该版本上实测可完成全量编译与打包([success] Total time: 70 s),无需升级 JDK;若需更高补丁版本,可另行安装第三方发行版 JDK。

二、前置条件

  1. 具有 root 权限的 CentOS 8 系统(本文命令均以 root 执行)。
  2. 可访问的归档镜像源:官方 vault.centos.org 实测存在访问限制,本文使用阿里云归档镜像 mirrors.aliyun.com/centos-vault/。
  3. 可访问 Node.js 官方下载站、Maven 中央仓库 repo1.maven.org 与 Apache 下载站。
  4. 磁盘空间 6 GB 以上:实测源码树加依赖缓存约 3.1 GB,前端 node_modules 另占约 840 MB。
  5. 内存 8 GB 以上(sbt 堆 -Xmx4g,前端构建自带 8 GB 旧生代上限)。

三、版本选型说明

Texera 处于 Apache 孵化阶段,正式版本形如 v1.2.0-incubating,其余为 *-rcN 候选 tag(实测仓库最新 tag 依次为 v1.2.0-incubating、v1.2.0-incubating-rc1 至 rc4、v1.2.1-incubating-rc1,尚无 1.2.1 正式版)。官方下载站当前提供 1.1.0-incubating 与 1.2.0-incubating 两个正式版目录。

本文实际采用 v1.2.0-incubating(commit c3aa6e4ba36bdd0cdc9f76bd7896c024dda392b3),理由:官方下载站最新正式版,本文方案 A/B 均针对该版本实测。

el8 软件包与 Texera 的匹配关系(实测):

组件el8 vault 提供版本是否满足
java-17-openjdk-devel17.0.1满足编译与运行
postgresql-server10.17(PostgreSQL 10)满足 DDL 与运行
git2.27.0满足源码获取
Node.js无(需官方 tarball,el8 最高 16)手动安装 24.x

四、方案 A:源码构建安装(在线,推荐)

4.1 方案说明

链路为:修复 EOL 软件源 → 安装 JDK 17 与 PostgreSQL → 安装 Node 24 与 sbt → 获取源码并初始化数据库 → jOOQ 生成与前后端编译 → stage 打包 → 启动验证。

4.2 修复软件源并安装 JDK 17

CentOS 8 EOL 后 mirror.centos.org 已下线,先整体切换到阿里云归档镜像,并把 $releasever 固定为仍保有完整归档的 8.5.2111:

sed -i -e "s|mirrorlist=|#mirrorlist=|" \
       -e "s|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com/centos-vault|" \
       /etc/yum.repos.d/CentOS-*.repo
sed -i "s|centos-vault/\$releasever|centos-vault/8.5.2111|g" /etc/yum.repos.d/CentOS-*.repo
dnf clean all
dnf makecache
echo $?
0

安装 JDK 17 与基础工具:

dnf install -y java-17-openjdk-devel git curl
echo $?
Transaction Summary
============================================================================================
Install  145 Packages
Upgrade    7 Packages

Total download size: 104 M
...
Complete!
0

安装期间 dnf 会自动启用 javapackages-runtime 201801 等模块流,属正常行为。java -version 确认输出 17.0.1 即可(见第一章)。

4.3 安装 PostgreSQL 并初始化

dnf install -y postgresql-server postgresql-contrib
echo $?
0

⚠️ 实测陷阱一:官方初始化命令 postgresql-setup --initdb 依赖 systemd,在未以 systemd 引导的环境(如最小化运行环境)直接失败,回显为 System has not been booted with systemd as init system (PID 1). Can't operate. 与 FATAL: no db datadir (PGDATA) configured for 'postgresql.service' unit。此时改用 initdb 手工初始化。

⚠️ 实测陷阱二:直接 su - postgres -c "initdb -D /var/lib/pgsql/data" 会报 initdb: invalid locale settings; check LANG and LC_* environment variables——系统缺少语言环境变量。加 LANG=C 即可成功。

完整初始化序列(实测):

rm -rf /var/lib/pgsql/data
su - postgres -c "LANG=C initdb -D /var/lib/pgsql/data"
echo $?
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
...
Success. You can now start the database server using:
...
0
su - postgres -c "LANG=C /usr/bin/pg_ctl -D /var/lib/pgsql/data -l /var/lib/pgsql/logfile start"
echo $?
waiting for server to start.... done
server started
0
su - postgres -c "psql -c \"ALTER USER postgres PASSWORD 'postgres';\""
ALTER ROLE

若系统以 systemd 正常引导,可直接用 postgresql-setup --initdb && systemctl start postgresql,无需上述手工步骤。

4.4 安装 Node.js 24 与 sbt

el8 仓库没有 Node 24,用官方 tarball(CentOS 8 的 glibc 2.28 满足 Node 24 运行要求,实测可用):

curl -sL -o /opt/node24.tar.xz https://nodejs.org/dist/v24.10.0/node-v24.10.0-linux-x64.tar.xz
mkdir -p /opt/node24
tar xJf /opt/node24.tar.xz -C /opt/node24 --strip-components=1
export PATH=/opt/node24/bin:$PATH
node -v
v24.10.0

sbt 通过 sbt-launch 运行(下载 1.12.9 启动 jar 并建立包装脚本固定堆内存):

curl -sL -o /usr/local/bin/sbt-launch.jar \
  https://repo1.maven.org/maven2/org/scala-sbt/sbt-launch/1.12.9/sbt-launch-1.12.9.jar
cat > /usr/local/bin/sbt <<'EOF'
#!/bin/bash
exec java -Xms512m -Xmx4g -jar /usr/local/bin/sbt-launch.jar "$@"
EOF
chmod +x /usr/local/bin/sbt

💡 技术拓展:JDK 版本管理在 RHEL 系上惯用 alternatives,但构建工具未必跟随:实测 el8 上部分构建工具不读取 alternatives 软链而使用自身探测逻辑,最稳妥的方式是像本文一样用包装脚本显式指定 java 路径与 JVM 参数,避免「java -version 正常但构建工具用了另一个 JDK」的隐性错位。

4.5 获取源码并初始化数据库

git clone https://github.com/apache/texera.git texera-ce
cd texera-ce && git checkout v1.2.0-incubating
git describe --tags
v1.2.0-incubating
su - postgres -c "psql -v ON_ERROR_STOP=0 -f /work/texera-ce/sql/texera_ddl.sql"
echo $?
su - postgres -c "psql -f /work/texera-ce/sql/iceberg_postgres_catalog.sql"
echo $?
0
0

DDL 含 28 条 CREATE TABLE;日志中 2 条 pgroonga 相关 ERROR 见第九章 9.2。

4.6 jOOQ 生成与后端编译

sbt "DAO/jooqGenerate"
[info] Generating JOOQ classes...
[info] JOOQ code generation completed successfully
[success] Total time: 2 s, completed Oct 15, 2026, 1:05:16 PM
sbt compile
[info] welcome to sbt 1.12.9 (Red Hat, Inc. Java 17.0.1)
...
[success] Total time: 70 s (0:01:10.0), completed Oct 15, 2026, 1:06:34 PM

验证点:均为 [success]。缺 jOOQ 生成直接编译会报 27 个 object jooq is not a member of package org.apache.texera.dao 错误,且 DAO/jooqGenerate 失败时退出码可能仍为 0,务必看日志。

4.7 前端构建

export PATH=/opt/node24/bin:$PATH
cd /work/texera-ce/frontend
corepack enable && corepack prepare yarn@4.14.1 --activate
yarn --version
yarn install
4.14.1
➤ YN0013: │ 1565 packages were added to the project (+ 839.42 MiB).
yarn run build
build-version: 1.2.0-incubating.261015399
...
                              | Initial total                                            |  13.95 MB |                 2.90 MB

实测产物 dist/ 共 39 MB,入口 index.html 18420 字节,与 Ubuntu 构建结果一致。

4.8 stage 打包

cd /work/texera-ce && sbt "WorkflowExecutionService/stage"
[success] Total time: 57 s, completed Oct 15, 2026, 1:07:40 PM

产物位于 amber/target/universal/stage/bin/(实测):amber、computing-unit-master、computing-unit-worker、texera-web-application 四个 Linux 启动脚本(另有同名 .bat)。

4.9 启动与最小验证

cd /work/texera-ce/amber
target/universal/stage/bin/texera-web-application -J-Xmx512m

启动日志关键行(实测节选):

texera-hikari - Start completed.
Starting TexeraWebApplication
Started application@b56c222{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
Started admin@5a2035e1{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
Started @4351ms

另开终端验证(实测回显):

curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080/api/resources/operator-metadata
200
curl -s -X POST -H "Content-Type: application/json" \
  -d '{"username":"ce_admin","password":"q1w2e3r4"}' \
  http://localhost:8080/api/auth/register
{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJjZV9hZG1pbiIsInVzZXJJZCI6MiwiZ29vZ2xlSWQiOm51bGwsImVtYWlsIjoiY2VfYWRtaW4iLCJyb2xlIjoiUkVTVFJJQ1RFRCIsImdvb2dsZUF2YXRhciI6bnVsbCwiZXhwIjoxNzkyNjc1NzI1fQ."}

验证点:元数据接口 200、注册返回 accessToken。完整单机执行需再按顺序启动 computing-unit-master(先)与 computing-unit-worker(后)。若系统以 systemd 引导,可将两个启动脚本封装为 service 单元开机自启。

五、方案 B:官方发行包部署

5.1 方案说明

官方为 1.2.0-incubating 发布源码包 apache-texera-1.2.0-incubating-src.tar.gz(约 25.5 MB)及 .sha512、.asc 校验件与 KEYS 公钥文件。发行包无 .git 目录,适合无法克隆 Git 仓库的环境;下载后仍需按 4.3-4.9 完成数据库初始化与编译启动。

5.2 下载与完整性校验

mkdir -p /opt/texera-pkg && cd /opt/texera-pkg
P=https://downloads.apache.org/incubator/texera/1.2.0-incubating
curl -sL -O $P/apache-texera-1.2.0-incubating-src.tar.gz
curl -sL -O $P/apache-texera-1.2.0-incubating-src.tar.gz.sha512
curl -sL -O $P/apache-texera-1.2.0-incubating-src.tar.gz.asc
curl -sL -O https://downloads.apache.org/incubator/texera/KEYS

实测环境经代理下载(curl -sL -x http://192.168.1.62:7897 -O ...),期间偶发一次 SSL 连接错误(curl 退出码 35),加 --retry 3 重试后成功;直连环境按上面写法即可。下载完成后四个文件齐备,src.tar.gz 实测 25509799 字节。

SHA-512 校验(实测回显):

sha512sum -c apache-texera-1.2.0-incubating-src.tar.gz.sha512
apache-texera-1.2.0-incubating-src.tar.gz: OK

导入 KEYS 并验签(实测回显):

gpg --import KEYS
gpg:               imported: 3
gpg:         new signatures: 1
gpg --verify apache-texera-1.2.0-incubating-src.tar.gz.asc apache-texera-1.2.0-incubating-src.tar.gz
gpg:                using RSA key 36B1DAC3286B3199B4CEFC2BB49658187ADCD1BD
gpg: Good signature from "Xuan Gu (CODE SIGNING KEY) <xuangu@apache.org>" [unknown]
Primary key fingerprint: FF17 8695 C2B3 8EC0 BB8F  4C49 33CC 8C5B 60E4 6FA4

Good signature 即验签通过;[unknown] 警告源于本地信任链未签署该公钥,属正常,核对主钥指纹与官方 KEYS 登记一致即可。el8 自带 gnupg2,无需另装。

5.3 解压与后续步骤

tar xzf apache-texera-1.2.0-incubating-src.tar.gz
cd apache-texera-1.2.0-incubating-src

以该目录为源码树执行 4.3、4.6-4.9(命令与路径一致,源码树内容与 GitHub tag 检出结果相同)。

六、方案对比

维度方案 A:源码构建(Git)方案 B:官方发行包
版本准确性tag 检出,含完整 git 历史与发布评审内容逐字节一致(sha512 + gpg 双校验)
网络要求需访问 GitHub只需访问 downloads.apache.org
体积完整仓库克隆25.5 MB 压缩包
后续编译需要(4.6-4.8)同样需要
适用场景开发调试与二次开发网络受限、需可追溯签名的环境

七、基础配置

7.1 服务端口

amber/src/main/resources/web-config.yml 定义 8080(应用)与 8081(管理)两个端口,修改后需重新 stage。防火墙放行示例:

firewall-cmd --permanent --add-port=8080/tcp --add-port=8081/tcp
firewall-cmd --reload

仅在启用 firewalld 的环境需要;本文实测环境未启用防火墙。

7.2 数据库与存储

common/config/src/main/resources/storage.conf:主库 jdbc:postgresql://localhost:5432/texera_db?currentSchema=texera_db,public(默认 postgres/postgres,与 4.3 设置一致);Iceberg 结果目录默认 postgres catalog;数据集默认 LakeFS(8000 端口)+ S3 协议对象存储(9000 端口)。

7.3 环境变量覆盖

storage.conf 每项均带 ${?STORAGE_...} 回退声明,全部存储配置可用 STORAGE_ 前缀环境变量覆盖,无需改文件。

7.4 SELinux 与开机自启

最小化实测环境未启用 SELinux;启用 SELinux 的机器若以非标准端口/目录运行,需相应调整布尔值或文件上下文。systemd 环境可将 texera-web-application、computing-unit-master、computing-unit-worker 封装为 service 单元,注意 master 必须先于 worker 启动。

八、验证清单

  1. java -version 输出 17.0.x;node -v 输出 v24.x。
  2. su - postgres -c "pg_ctl -D /var/lib/pgsql/data status" 显示 server is running。
  3. sbt "DAO/jooqGenerate" 日志含 JOOQ code generation completed successfully。
  4. sbt compile 与 sbt "WorkflowExecutionService/stage" 均 [success]。
  5. yarn run build 产出 frontend/dist/index.html(实测 18420 字节)。
  6. texera-web-application -J-Xmx512m 日志出现 Started @xxxxms。
  7. curl http://localhost:8080/api/resources/operator-metadata 返回 200(163 个算子)。
  8. 注册接口返回 accessToken;curl http://localhost:8081/healthcheck 返回 {"deadlocks":{"healthy":true}}。

九、常见问题(FAQ)

9.1 postgresql-setup --initdb 报 systemd 错误

回显 System has not been booted with systemd as init system (PID 1). Can't operate.:该环境未以 systemd 引导,改用 4.3 节的 initdb + pg_ctl 手工流程;systemd 环境可正常使用原命令。

9.2 initdb 报 locale 无效

回显 initdb: invalid locale settings; check LANG and LC_* environment variables:系统缺少语言环境定义,在命令前加 LANG=C(见 4.3)即可;需要 UTF-8 排序规则时先 localedef 生成对应 locale。

9.3 DDL 中 pgroonga 的 2 条 ERROR

el8 无 pgroonga 包,CREATE EXTENSION IF NOT EXISTS pgroonga 与插件注册函数实测报 2 条 ERROR,28 张业务表正常建成,仅全文检索增强缺失。需要时先编译安装 groonga/pgroonga 再重跑 DDL。

9.4 编译报 27 个 jooq 错误

形态为 object jooq is not a member of package org.apache.texera.dao:跳过 DAO/jooqGenerate 或数据库不可达所致。该任务失败时退出码可能为 0,必须确认日志无 JOOQ code generation failed。

9.5 GET / 返回 404 但 API 正常

stage 独立启动时静态目录按相对路径推导(../../frontend/dist),不指向真实构建产物。保持源码树布局运行或由反向代理托管前端文件即可;/api/* 不受影响。

9.6 DNF 安装慢或 403

官方 vault 源存在访问限制,按 4.2 节整体切换到阿里云归档镜像并把版本固定为 8.5.2111;执行前先 dnf clean all。

十、卸载与清理

# 停服务
pkill -f texera-web-application
su - postgres -c "pg_ctl -D /var/lib/pgsql/data stop"
# 删除数据库(如不再需要)
su - postgres -c "psql -c 'DROP DATABASE IF EXISTS texera_db;'"
su - postgres -c "psql -c 'DROP DATABASE IF EXISTS texera_iceberg_catalog;'"
# 删除源码与依赖缓存
rm -rf /work/texera-ce /root/.cache/coursier /root/.sbt /opt/texera-pkg /opt/node24
# 卸载系统包(可选)
dnf remove -y java-17-openjdk-devel postgresql-server postgresql-contrib
dnf clean all

以上命令均为标准 dnf/pg_ctl/DROP DATABASE 管理操作;rm -rf 覆盖本文创建的全部落盘内容(源码树、coursier 缓存、sbt 目录、发行包、Node 解压目录)。执行后系统回到安装前状态;软件源若需恢复,还原 /etc/yum.repos.d/CentOS-*.repo 的 sed 修改即可。

十一、参考链接

  • Apache Texera 官网:https://texera.apache.org/
  • 源码仓库:https://github.com/apache/texera
  • 官方发行包目录:https://downloads.apache.org/incubator/texera/1.2.0-incubating/
  • 官方 KEYS:https://downloads.apache.org/incubator/texera/KEYS
  • CentOS 归档镜像:https://mirrors.aliyun.com/centos-vault/
  • Node.js 下载:https://nodejs.org/dist/v24.10.0/
  • sbt-launch(Maven 坐标):org.scala-sbt:sbt-launch:1.12.9
  • Apache 软件基金会孵化器声明:https://incubator.apache.org/