跳到主要内容

plantpulse-analytics (分析层)

角色

负责大容量分析、SQL 查询、数据目录的大数据堆栈。分布式分析 Cassandra、PostgreSQL、Iceberg(MinIO) 数据。pd 启动顺序中的第二道门卫

项目
模块名plantpulse-analytics
安装路径/opt/kopens/plantpulse-platform/plantpulse-analytics/
大小约 4.4GB(平台中最大)
pd 服务analytics — MASTER: spark-master → hive → gravitino → kyuubi / WORKER: spark-worker → kyuubi
账户PP_SPARK_USER / PP_SPARK_PASSWORD(客户端),PP_HIVE_USER / PP_HIVE_PASSWORD(元数据存储),PP_GRAVITINO_USER / PP_GRAVITINO_PASSWORD(目录后端)

架构

目录结构

plantpulse-analytics/
├── spark/ # bin/ (spark-submit · beeline · spark-sql) · conf/ (생성물) · logs/ · work/
├── hive/ # bin/ · conf/hive-site.xml (생성물) · logs/
├── kyuubi/ # bin/ · conf/kyuubi-defaults.conf (생성물) · logs/ · work/
├── gravitino/ # bin/ · conf/gravitino-iceberg-rest-server.conf (생성물) · logs/
└── hadoop/ # 라이브러리 — 단일 노드에서는 HDFS 를 띄우지 않습니다

各组件说明

Spark — 分布式处理引擎

项目
端口7077(主节点 RPC)· 4440(主节点 UI)· 8081(工作节点 UI)
模式Standalone。工作节点接入后,该节点的 spark-worker 向主节点注册
配置spark-defaults.conf.template · spark-env.sh.template · metrics.properties.template
工作负载Kyuubi 会话的 SQL、数据仓库的 Iceberg 归档作业

主节点 UI 是 http://<server-ip>:4440/(不是 8080)。Iceberg 目录模板会渲染为指向 Gravitino 的 REST 端点(PP_GRAVITINO_ICEBERG_REST_PORT,19001)。

docker exec -it plantpulse-datalake /opt/kopens/plantpulse-platform/plantpulse-analytics/spark/bin/spark-sql --master spark://127.0.0.1:7077
归档工作节点在数据湖之外

Cassandra → Iceberg 归档器(plantpulse-warehouse)自 2026-09-06 起由平台镜像plantpulse-warehouse 容器协助。该容器中没有该模块。归档作业的状态可在 pd retentioncold_tier · archive_job 行查看 → warehouse 模块

Hive Metastore

项目
端口9083(thrift)
后端PostgreSQL 数据库 hive-metastore-230PP_HIVE_DB),账户 hive
配置hive-site.xml.template(渲染至 hive 和 spark 两处)

PP_HIVE_PASSWORD 的一个值是双向的 — 元数据存储连接到 PostgreSQL 时使用它,客户端通过 Kyuubi 连接时用 hive-auth.properties 验证。因此 passwd.sh 同时执行账户变更和重新渲染。

Kyuubi — SQL 网关

通过 JDBC / Thrift 为 SQL 客户端(DBeaver、Tableau、数据网关)接入 Spark 的入口。提供会话隔离和队列管理。

项目
端口10000(thrift)· 10099(Web UI)
配置kyuubi-defaults.conf.template
认证hive-auth.properties — 账户 PP_SPARK_USER / PP_SPARK_PASSWORD此文件生成
docker exec -it plantpulse-datalake bash -c \
'/opt/kopens/plantpulse-platform/plantpulse-analytics/spark/bin/beeline -u "jdbc:hive2://127.0.0.1:10000/default" -n "$PP_SPARK_USER" -p "$PP_SPARK_PASSWORD"'

启动顺序中 Kyuubi 最后启动,启动后 pd status 显示 PP_ANALYTICS[KYUUBI] STOPPED 数十秒是正常现象。

Gravitino — Iceberg REST 目录

Iceberg 表的目录服务器。仅在 MASTER 上运行,工作节点的 Spark 指向主节点的服务。

项目
端口19001(REST API)— 没有 Web 界面。 / 返回 404
后端PostgreSQL 账户 gravitinoPP_GRAVITINO_PASSWORD
配置gravitino-iceberg-rest-server.conf.template

统一运维

docker exec plantpulse-datalake pd status analytics
docker exec plantpulse-datalake pd restart analytics # 실행 중인 SQL · Spark 잡이 전부 중단됩니다
docker exec plantpulse-datalake pd logs --lines 100 analytics

如果归档作业正在运行(pd retentionarchive_jobNA + «running»),请等待其完成后重启。

常用查询

-- Cassandra 직접 조회 (Spark SQL)
SELECT date_format(time, 'yyyy-MM-dd HH:00') AS hour, avg(value) AS avg_value
FROM cassandra.pp.tm_tag_point
WHERE tag_id = 'TAG_001' AND time >= date_sub(current_date(), 1)
GROUP BY 1 ORDER BY 1;

-- Iceberg (콜드 티어)
USE iceberg;
SHOW TABLES;
SELECT count(*), min(time), max(time) FROM tw_tag_point WHERE dt BETWEEN '2026-01-01' AND '2026-05-30';

日志

docker exec plantpulse-datalake pd logs --list | grep -i "spark\|hive\|kyuubi\|gravitino"

常见问题

症状原因处置
Spark 作业 OutOfMemoryexecutor 内存不足调整 spark-defaults.conf.templatespark.executor.memory
Kyuubi 无法启动核心数大于实际值检查主机的 DOCKER_PP_CLUSTER_CORES 是否正确传递到容器 — 16 vCPU 主机认为有 30 核时会发生此情况
Kyuubi 会话超时空闲会话积累kyuubi.session.idle.timeout
元数据存储连接失败PostgreSQL 宕机 · hive 密码不匹配pd status storagepasswd.sh PP_HIVE_PASSWORD
Iceberg 小文件堆积未执行 optimize数据仓库容器的优化作业 → warehouse 模块
Spark UI 无法访问防火墙4440

调优要点

项目模板建议
Spark executor 内存spark-defaults.conf.template主机内存的 25 ~ 50%
Spark 核心数PP_CLUSTER_CORES(主机 DOCKER_PP_CLUSTER_CORES主机核心数 − 2(自动)
Kyuubi engine 共享级别kyuubi-defaults.conf.templatekyuubi.session.engine.share.level=USER

详细调优参见性能调优

相关文档