Zum Hauptinhalt springen

plantpulse-warehouse (Daten-Warehouse / Lakehouse)

Rolle​

Ein Lakehouse-Modul, das die Zeitreihendaten von Aster TSDS im Apache Iceberg-Format auf RustFS archiviert. Es dient der Langzeitaufbewahrung, der Verbesserung der Analyse-Query-Performance und der Integration mit anderen BI-Tools.

ElementWert
Modulnameplantpulse-warehouse-web
Installationspfad/opt/kopens/plantpulse-platform/plantpulse-warehouse/
Port9600
FormatApache Iceberg V2
SpeicherungRustFS (S3)

Konfiguration​

Verzeichnisstruktur​

plantpulse-warehouse/
├── app/ # 웨어하우스 서비스
├── bin/start.sh stop.sh log-viewer.sh
├── config/
├── etc/ # PID 관리
├── lib/ # Spark JAR
├── logs/system.log
└── s3/
├── archive.sh # 아카이빙
└── optimize.sh # 테이블 최적화

Archivierung (archive.sh)​

# 전일 데이터 아카이빙 (기본)
/opt/kopens/plantpulse-platform/plantpulse-warehouse/s3/archive.sh

# 특정 날짜
/opt/kopens/plantpulse-platform/plantpulse-warehouse/s3/archive.sh 2026-05-29
  • Bei 1.000.000 Datensätzen etwa 60 Sekunden
  • Ziel: Aster TSDB tm_tag_point → RustFS plantpulse-iceberg/warehouse/tag_point/
  • Partitionierung: dt=YYYY-MM-DD/hh=HH/

Optimierung der Iceberg-Tabelle (optimize.sh)​

Zusammenführen kleiner Dateien, Löschen abgelaufener Snapshots, Bereinigung von Metadaten.

/opt/kopens/plantpulse-platform/plantpulse-warehouse/s3/optimize.sh

Empfohlener Zeitraum: Einmal pro Woche nachts. Es ist kaum nötig, dies manuell auszuführen — Temporal führt bereits PP-S3-OPTIMIZER-WEEKLY(Sonntag 04:00) aus, und das obige Skript ist dasselbe, das der Workflow aufruft. Die Uhrzeit kann auf OP_TIME geändert werden.

Betriebsbefehle​

cd /opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin

./restart-warehouse.sh
./pd status # 9600 RUNNING 확인

# 표준 헬스체크 (익명, 순수 liveness — 공통 3개 필드 + 시스템/JVM 메트릭 포함)
curl -fsS http://127.0.0.1:9600/api/health
# → {"status":"UP","service":"plantpulse-warehouse-s3","ts":..., ...}

Häufig auftretende Probleme​

SymptomUrsacheMaßnahme
Archivierungsjob schlägt fehlSpark / Hive nicht vorbereitetNach pd restart analytics erneut versuchen
Explosion kleiner Dateienoptimize.sh nicht ausgeführtEinmal pro Woche regelmäßig ausführen
RustFS-Disk vollretention nicht konfiguriertIceberg expire snapshots + Lifecycle-Richtlinie
Kyuubi-Query OOMGroße Tabelle / fehlende PartitionWHERE dt = '...' angeben

Beispiel für SQL-Abfragen​

USE iceberg;

-- 메타데이터
DESCRIBE TABLE EXTENDED tag_point;

-- 5월 집계
SELECT tag_id, count(*) AS rows, min(time), max(time)
FROM tag_point
WHERE dt BETWEEN '2026-05-01' AND '2026-05-31'
GROUP BY tag_id
ORDER BY rows DESC
LIMIT 100;

-- 스냅샷 이력
SELECT * FROM tag_point.snapshots;
SELECT * FROM tag_point.history;

Zugehörige Dokumente​