Zum Hauptinhalt springen

plantpulse-analytics (Analyseschicht)

Rolle

Ein Big-Data-Stack, der große Datenmengen-Analytik, SQL-Abfragen und Datenkatalog verwaltet. Er führt verteilte Analytik über Cassandra-, PostgreSQL- und Iceberg-(MinIO-)Daten durch. In der Startsequenz von pd ist er das zweite Gatekeeper-Modul.

ElementWert
Modulnameplantpulse-analytics
Installationspfad/opt/kopens/plantpulse-platform/plantpulse-analytics/
Größeca. 4,4GB (größtes auf der Plattform)
pd Diensteanalytics — MASTER: spark-master → hive → gravitino → kyuubi / WORKER: spark-worker → kyuubi
KontenPP_SPARK_USER / PP_SPARK_PASSWORD (Client), PP_HIVE_USER / PP_HIVE_PASSWORD (Metastore), PP_GRAVITINO_USER / PP_GRAVITINO_PASSWORD (Katalog-Backend)

Architektur

Verzeichnisstruktur

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 를 띄우지 않습니다

Komponenten im Detail

Spark — verteilte Verarbeitungs-Engine

ElementWert
Ports7077 (Master RPC) · 4440 (Master UI) · 8081 (Worker UI)
ModusStandalone. Worker-Knoten registrieren sich beim Master über spark-worker
Konfigurationspark-defaults.conf.template · spark-env.sh.template · metrics.properties.template
WorkloadsSQL aus Kyuubi-Sitzungen, Iceberg-Archive-Jobs aus dem Warehouse

Die Master UI läuft unter http://<server-ip>:4440/ (nicht auf 8080). Der Iceberg-Katalog wird durch die Template-Rendierung auf den REST-Endpoint von Gravitino verwiesen (PP_GRAVITINO_ICEBERG_REST_PORT, Port 19001).

docker exec -it plantpulse-datalake /opt/kopens/plantpulse-platform/plantpulse-analytics/spark/bin/spark-sql --master spark://127.0.0.1:7077
Der Archive-Worker läuft außerhalb des Data Lake

Der Cassandra-zu-Iceberg-Archiveur (plantpulse-warehouse) wird ab 2026-09-06 im Container plantpulse-warehouse des Plattform-Image ausgeführt. Dieses Modul ist in diesem Container nicht vorhanden. Der Status von Archive-Jobs wird über die Zeilen cold_tier · archive_job in pd retention überwacht → warehouse-Modul

Hive Metastore

ElementWert
Port9083 (thrift)
BackendPostgreSQL DB hive-metastore-230 (PP_HIVE_DB), Konto hive
Konfigurationhive-site.xml.template (wird in hive und spark ausgegeben)

PP_HIVE_PASSWORD ist bidirektional — der Metastore präsentiert den Wert bei der Verbindung zu PostgreSQL und der Client validiert ihn bei der Verbindung zu Kyuubi über hive-auth.properties. Daher führt passwd.sh sowohl Kontoänderung als auch Neu-Rendering durch.

Kyuubi — SQL-Gateway

Das Gateway für SQL-Clients (DBeaver · Tableau · Daten-Gateway) zur Verbindung mit Spark über JDBC/Thrift. Es bietet Session-Isolation und Queuing.

ElementWert
Ports10000 (thrift) · 10099 (Web UI)
Konfigurationkyuubi-defaults.conf.template
Authentifizierunghive-auth.properties — Konto PP_SPARK_USER / PP_SPARK_PASSWORD werden von dieser Datei erstellt
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"'

Da Kyuubi zuletzt in der Startsequenz ausgeführt wird, ist es normal, dass pd status kurz nach dem Start für einige Dutzend Sekunden PP_ANALYTICS[KYUUBI] STOPPED anzeigt.

Gravitino — Iceberg REST-Katalog

Der Katalog-Server für Iceberg-Tabellen. Läuft nur auf dem MASTER; Spark auf Workern zeigt auf den des Masters.

ElementWert
Port19001 (REST API) — es gibt keine Web-UI. / antwortet mit 404
BackendPostgreSQL-Konto gravitino (PP_GRAVITINO_PASSWORD)
Konfigurationgravitino-iceberg-rest-server.conf.template

Integrierte Verwaltung

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

Wenn Archive-Jobs laufen (archive_job in pd retention ist NA + «running»), starten Sie nach deren Abschluss neu.

Häufig verwendete Abfragen

-- 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';

Protokolle

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

Häufig auftretende Probleme

SymptomUrsacheAbhilfe
Spark-Job OutOfMemoryExecutor-Speicher zu niedrigspark.executor.memory in spark-defaults.conf.template
Kyuubi startet nichtKernanzahl höher als verfügbarÜberprüfen Sie, ob DOCKER_PP_CLUSTER_CORES des Hosts an den Container weitergeleitet wird — ein 16-vCPU-Server, der 30 Kerne sieht, führt zu diesem Problem
Kyuubi-Sitzungs-Timeoutinaktive Sitzungen häufen sichkyuubi.session.idle.timeout
Metastore-VerbindungsfehlerPostgreSQL ist ausfallend · Passwort hive stimmt nicht übereinpd status storage, passwd.sh PP_HIVE_PASSWORD
Iceberg kleine Datei-Stauoptimize wurde nicht ausgeführtOptimierungs-Job im Warehouse-Container → warehouse-Modul
Spark UI Zugriff verweigertFirewallPort 4440

Tuning-Punkte

ElementTemplateEmpfehlung
Spark executor memoryspark-defaults.conf.template25 ~ 50% des Host-Speichers
Spark coresPP_CLUSTER_CORES (Host DOCKER_PP_CLUSTER_CORES)Host-Kerne − 2 (automatisch)
Kyuubi engine Sharing-Levelkyuubi-defaults.conf.templatekyuubi.session.engine.share.level=USER

Detailliertes Tuning finden Sie unter Performance-Tuning.

Verwandte Dokumentation