본문으로 건너뛰기

plantpulse-warehouse (데이터 웨어하우스 / 레이크하우스)

역할​

Aster TSDB 의 시계열 데이터를 Apache Iceberg 형식으로 RustFS 에 아카이빙하는 레이크하우스 모듈. 장기 보관, 분석 쿼리 성능, 다른 BI 도구 연동을 위해 사용합니다.

항목값
모듈명plantpulse-warehouse-web
설치 경로/opt/kopens/plantpulse-platform/plantpulse-warehouse/
포트9600
형식Apache Iceberg V2
저장RustFS (S3)

구성​

디렉토리 구조​

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 # 테이블 최적화

아카이빙 (archive.sh)​

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

# 특정 날짜
/opt/kopens/plantpulse-platform/plantpulse-warehouse/s3/archive.sh 2026-05-29
  • 1,000,000건 기준 약 60초
  • 대상: Aster TSDB tm_tag_point → RustFS plantpulse-iceberg/warehouse/tag_point/
  • 파티션: dt=YYYY-MM-DD/hh=HH/

Iceberg 테이블 최적화 (optimize.sh)​

작은 파일 병합, 만료된 스냅샷 삭제, 메타데이터 정리.

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

권장 주기: 주 1회 야간. 손으로 돌릴 일은 거의 없습니다 — Temporal 이 PP-S3-OPTIMIZER-WEEKLY(일요일 04:00)로 이미 돌리고 있고, 위 스크립트는 그 워크플로우가 부르는 것과 같습니다. 시각은 OP_TIME 으로 바꿉니다.

운영 명령​

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":..., ...}

자주 발생하는 문제​

증상원인조치
아카이빙 Job 실패Spark / Hive 미준비pd restart analytics 후 재시도
작은 파일 폭증optimize.sh 미실행주 1회 정기 실행
RustFS 디스크 부족retention 미설정Iceberg expire snapshots + 라이프사이클 정책
Kyuubi 쿼리 OOM큰 테이블 / 파티션 누락WHERE dt = '...' 명시

SQL 조회 예제​

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;

관련 문서​