跳到主要内容

plantpulse-analytics(分析层)

角色​

负责大规模分析 · SQL 查询 · 数据目录的大数据栈。分布式分析 Aster TSDB · PostgreSQL · Iceberg(RustFS) 数据。在 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
归档工作节点位于数据湖之外

Aster TSDB → Iceberg 归档器(plantpulse-warehouse-web)从 2026-09-06 起在平台镜像的 plantpulse-warehouse-web 容器中运行。此容器中没有该模块。归档作业的状态通过 pd retention 的 cold_tier · archive_job 行查看 → warehouse 模块

Hive Metastore​

项目值
端口9083(thrift)
后端PostgreSQL 数据库 hive-metastore-230(PP_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 账户 gravitino(PP_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 retention 的 archive_job 为 NA + «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.template 的 spark.executor.memory
Kyuubi 一直无法启动核心数大于实际值检查主机的 DOCKER_PP_CLUSTER_CORES 是否传递到容器——16 vCPU 的机器认为有 30 核就会这样
Kyuubi 会话超时idle 会话累积kyuubi.session.idle.timeout
元存储连接失败PostgreSQL 宕机 · hive 密码不匹配pd status storage, passwd.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 引擎共享级别kyuubi-defaults.conf.templatekyuubi.session.engine.share.level=USER

详细调优请参考性能调优。

相关文档​