Zum Hauptinhalt springen

plantpulse-analytics (Analyseschicht)

Rolle​

Big-Data-Stack für die Verarbeitung großer Datenmengen, SQL-Abfragen und Datenkatalog. Verteilt die Analyse von Aster TSDB-, PostgreSQL- und Iceberg-Daten (RustFS). pd In der Startreihenfolge ist es der zweite Wächter.

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

Aufbau​

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

Die einzelnen Komponenten​

Spark — verteilte Verarbeitungs-Engine​

ElementWert
Ports7077 (Master-RPC) · 4440 (Master-UI) · 8081 (Worker-UI)
ModusStandalone. Wenn sich ein Worker-Knoten verbindet, registriert sich dessen spark-worker beim Master
Konfigurationspark-defaults.conf.template · spark-env.sh.template · metrics.properties.template
WorkloadSQL der Kyuubi-Sessions, Iceberg-Archivjobs des Warehouse

Die Master-UI ist unter http://<server-ip>:4440/ erreichbar (nicht 8080). Die Vorlage rendert den Iceberg-Katalog so, dass er auf den REST-Endpunkt von Gravitino (PP_GRAVITINO_ICEBERG_REST_PORT, 19001) zeigt.

docker exec -it plantpulse-datalake /opt/kopens/plantpulse-platform/plantpulse-analytics/spark/bin/spark-sql --master spark://127.0.0.1:7077
Archiv-Worker liegt außerhalb des Data Lakes

Der Aster-TSDB → Iceberg-Archiver (plantpulse-warehouse-web) läuft seit dem 06.09.2026 im plantpulse-warehouse-web-Container des Plattform-Images. Dieser Container enthält dieses Modul nicht. Den Status der Archivjobs sehen Sie in pd retention in den Zeilen cold_tier · archive_job → Warehouse-Modul

Hive Metastore​

ElementWert
Ports9083 (Thrift)
BackendPostgreSQL-DB hive-metastore-230 (PP_HIVE_DB), Konto hive
Konfigurationhive-site.xml.template (wird für hive und spark an zwei Stellen gerendert)

PP_HIVE_PASSWORD ist ein Wert, der in beide Richtungen wirkt — er wird präsentiert, wenn der Metastore auf PostgreSQL zugreift, und als hive-auth.properties validiert, wenn der Client sich bei Kyuubi anmeldet. Deshalb übernimmt passwd.sh sowohl die Kontenänderung als auch das Neurendern.

Kyuubi — SQL-Gateway​

Über JDBC/Thrift gelangen SQL-Clients (DBeaver · Tableau · Daten-Gateway) zu Spark. Es bietet Session-Isolation und Queuing.

ElementWert
Ports10000 (Thrift) · 10099 (Web-UI)
Konfigurationkyuubi-defaults.conf.template
Authentifizierunghive-auth.properties — das Konto PP_SPARK_USER / PP_SPARK_PASSWORD wird 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 in der Startreihenfolge als Letztes kommt, ist es normal, dass direkt nach dem Start in pd status für einige zehn Sekunden PP_ANALYTICS[KYUUBI] STOPPED angezeigt wird.

Gravitino — Iceberg REST-Katalog​

Katalog-Server für Iceberg-Tabellen. Läuft nur auf dem MASTER; die Spark-Worker verwenden den des Masters.

ElementWert
Ports19001 (REST API) — es gibt keine Weboberfläche. / antwortet mit 404
BackendPostgreSQL-Konto gravitino (PP_GRAVITINO_PASSWORD)
Konfigurationgravitino-iceberg-rest-server.conf.template

Integrierter Betrieb​

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 ein Archivjob läuft (pd retention, archive_job = NA + «running»), starten Sie nach dessen 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';

Logs​

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

Häufig auftretende Probleme​

SymptomUrsacheMaßnahme
OutOfMemory bei Spark-JobsZu wenig Executor-Speicherspark-defaults.conf.template, spark.executor.memory
Kyuubi startet nieKernanzahl größer als tatsächlich vorhandenPrüfen, ob DOCKER_PP_CLUSTER_CORES des Hosts an den Container weitergereicht wird — so passiert es, wenn eine 16-vCPU-Box 30 Kerne meldet
Kyuubi-Session-TimeoutAnsammlung von Leerlauf-Sessionskyuubi.session.idle.timeout
Metastore-Verbindung fehlgeschlagenPostgreSQL-Ausfall · hive Passwort-abweichungpd status storage, passwd.sh PP_HIVE_PASSWORD
Ansammlung kleiner Iceberg-DateienOptimierung nicht ausgeführtOptimierungsjob im Warehouse-Container → Warehouse-Modul
Spark-UI nicht erreichbarFirewall4440

Tuning-Punkte​

ElementVorlageEmpfehlung
Spark-Executor-Speicherspark-defaults.conf.template25 bis 50 % des Host-Speichers
Spark-KernePP_CLUSTER_CORES (Host DOCKER_PP_CLUSTER_CORES)Host-Kerne − 2 (automatisch)
Freigabestufe der Kyuubi-Enginekyuubi-defaults.conf.templatekyuubi.session.engine.share.level=USER

Detailliertes Tuning finden Sie unter Performance-Tuning.

Verwandte Dokumente​