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 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 作业 OutOfMemory | executor 内存不足 | 调整 spark-defaults.conf.template 的 spark.executor.memory |
| Kyuubi 无法启动 | 核心数大于实际值 | 检查主机的 DOCKER_PP_CLUSTER_CORES 是否正确传递到容器 — 16 vCPU 主机认为有 30 核时会发生此情况 |
| Kyuubi 会话超时 | 空闲会话积累 | 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 engine 共享级别 | kyuubi-defaults.conf.template | kyuubi.session.engine.share.level=USER |
详细调优参见性能调优。
相关文档
- 数据湖概览
- warehouse 模块 — Iceberg 归档
- plantpulse-data-gateway — SQL 控制台