Trino + Delta Lake + MinIO + Hive Metastore
  • Python 87.3%
  • Dockerfile 12.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
klbot 7ac85f0b89 feat: Trino + Delta Lake + MinIO + Hive Metastore Stack
Vollständiger Data Lake Stack:
- MinIO (S3 Object Storage)
- PostgreSQL (Hive Metastore Backend)
- Hive Metastore 4.0.1 (mit PostgreSQL + S3A Support)
- Trino (SQL Query Engine)

Funktioniert:
- Sample Daten als Delta Lake (partitioniert) in MinIO
- Trino SQL Queries auf Delta Lake Tabellen
- Aggregationen (GROUP BY, COUNT, SUM, AVG)

Siehe README.md für Setup-Anleitung.
2026-09-06 08:21:45 +00:00
hive-metastore feat: Trino + Delta Lake + MinIO + Hive Metastore Stack 2026-09-06 08:21:45 +00:00
scripts feat: Trino + Delta Lake + MinIO + Hive Metastore Stack 2026-09-06 08:21:45 +00:00
trino feat: Trino + Delta Lake + MinIO + Hive Metastore Stack 2026-09-06 08:21:45 +00:00
docker-compose.yml feat: Trino + Delta Lake + MinIO + Hive Metastore Stack 2026-09-06 08:21:45 +00:00
README.md feat: Trino + Delta Lake + MinIO + Hive Metastore Stack 2026-09-06 08:21:45 +00:00

Trino + Delta Lake + MinIO + Hive Metastore

Vollständiger Data Lake Stack mit Trino (SQL Engine), Delta Lake (Table Format), MinIO (S3 Storage) und Hive Metastore (Metadata).

Architektur

┌─────────────────────────────────────────────┐
│                  Trino (8080)               │
│            SQL Query Engine                 │
└──────────┬──────────────────┬───────────────┘
           │                  │
    ┌──────▼──────┐   ┌──────▼──────┐
    │  Hive Meta  │   │   MinIO     │
    │  Store      │   │   (9000)    │
    │  (9083)     │   │   S3 Storage│
    └──────┬──────┘   └─────────────┘
           │
    ┌──────▼──────┐
    │ PostgreSQL  │
    │  (Metastore │
    │   Backend)  │
    └─────────────┘

Komponenten

Service Port Beschreibung
MinIO 9000, 9001 S3-kompatibler Object Storage
MinIO Console 9001 Web UI für MinIO
PostgreSQL 5432 Backend für Hive Metastore
Hive Metastore 9083 Metadata Service (Thrift)
Trino 8080 Distributed SQL Query Engine

Setup

1. Stack starten

cd /home/docker/trino-delta-lake
docker compose up -d --build

2. Warten bis alles bereit ist

# Hive Metastore sollte "Initialized schema successfully" anzeigen
docker logs trino-hive-metastore 2>&1 | grep "Initialized"

# Trino sollte "SERVER STARTED" anzeigen
docker logs trino 2>&1 | grep "SERVER STARTED"

3. Sample Daten generieren

pip install polars deltalake boto3 s3fs pyarrow
python3 scripts/generate_sample_data.py

4. In Trino einloggen

docker exec -it trino trino

5. Schema und Tabelle erstellen

-- Schema erstellen
CREATE SCHEMA IF NOT EXISTS hive.player_stats
WITH (location = 's3a://delta-lake/warehouse/tables');

-- Tabelle registrieren (extern, zeigt auf Delta Lake Dateien)
CREATE TABLE hive.player_stats.player_stats (
  player_id varchar,
  username varchar,
  game_mode varchar,
  wins integer,
  games integer,
  playtime_seconds bigint,
  p_delivery_date varchar
) WITH (
  format = 'PARQUET',
  external_location = 's3a://delta-lake/warehouse/tables/player_stats',
  partitioned_by = ARRAY['p_delivery_date']
);

-- Partitionen synchronisieren
CALL hive.system.sync_partition_metadata('player_stats', 'player_stats', 'FULL');

6. Daten abfragen

-- Alle Daten
SELECT * FROM hive.player_stats.player_stats;

-- Aggregation
SELECT game_mode, COUNT(*) as players, SUM(wins) as total_wins
FROM hive.player_stats.player_stats
GROUP BY game_mode
ORDER BY total_wins DESC;

-- Nach Datum filtern
SELECT * FROM hive.player_stats.player_stats
WHERE p_delivery_date = '2026-09-01';

Dateien

├── docker-compose.yml          # Alle Services
├── hive-metastore/
│   ├── Dockerfile              # Hive Metastore mit PostgreSQL + S3 Support
│   └── core-site.xml           # S3A Konfiguration für Hive
├── trino/
│   ├── etc/
│   │   ├── config.properties   # Trino Server Config
│   │   ├── node.properties     # Trino Node Config
│   │   └── log.properties      # Logging Config
│   └── catalog/
│       ├── delta.properties    # Delta Lake Catalog
│       └── hive.properties     # Hive Catalog
└── scripts/
    ├── generate_sample_data.py # Sample Daten als Delta Lake
    └── requirements.txt        # Python Dependencies

Credentials (Demo)

Service User Password
MinIO minioadmin minioadmin123
PostgreSQL hive password
Trino (keine Auth) -

⚠️ Für Production: Credentials über Vaultwarden oder Docker Secrets setzen!

Hive Metastore — Warum braucht man ihn?

Der Hive Metastore (HMS) speichert Tabellen-Metadata:

  • Tabellen-Name, Schema (Spalten), Speicherort
  • Partitionierung (welche Partitionen existieren, wo liegen sie)
  • Tabellen-Format (PARQUET, DELTA, etc.)

Ohne HMS wüsste Trino nicht, dass eine Tabelle existiert. Der HMS macht aus "Dateien in S3" benannte Tabellen die man mit SQL abfragen kann.

Delta Lake — Warum als Table Format?

  • ACID Transactions: Sichere Schreiboperationen
  • Schema Evolution: Spalten hinzufügen ohne Tabelle neu zu erstellen
  • Time Travel: Alte Versionen abfragen (SELECT * FROM table VERSION AS OF 0)
  • Partition Pruning: Nur relevante Partitionen lesen
  • Upsert/Delete: Datensätze aktualisieren und löschen