Architecture · Batch Data Pipeline

Airbnb Listings Pipeline

Tägliche Batch-ETL: Rohdaten-Snapshots von Inside Airbnb werden von Airflow eingesammelt, unverändert in MinIO abgelegt und per Astro SDK nach PostgreSQL geladen. Ein separater Spark-Cluster übernimmt sekundäre Transformationen direkt auf den MinIO-Objekten; Metabase dient als BI-Schicht auf dem Data Warehouse.

AirflowAstronomer Runtime 12.9.0 MinIORELEASE.2024-06-13 Astro SDKaql.load_file PostgreSQL Spark3.3.0 / Hadoop 3.3 Metabasev0.52.8.4 Docker Composendsnet bridge

Datenfluss

External · HTTP

Inside Airbnb

Öffentlicher Datensatz, London-Snapshot als gzip-komprimierte CSV. Zugriff erfordert einen Browser-artigen User-Agent-Header (sonst HTTP 403).

GET http://data.insideairbnb.com/…/listings.csv.gz

Orchestration · Airflow DAG

listings  @daily · catchup=False

Vier sequentielle Tasks in dags/listings.py, ausgeführt in Docker-Containern auf dem ndsnet-Bridge-Netz.

Sensor is_api_available poke 30s, reschedule, fail-fast bei 403/404
PythonOperator ensure_bucket legt Bucket airbnb-raw an, falls nötig
PythonOperator fetch_and_store Download, gunzip, Upload nach MinIO — nur der S3-Key geht an XCom
Astro SDK load_to_dw aql.load_file — natives COPY nach Postgres

Object Storage · S3-kompatibel

MinIO

Persistenter Objektspeicher, Volume-Mount unter include/data/minio. Hostname bewusst minio (nicht der Containername) — Unterstriche brechen DNS-Auflösung für manche Clients.

s3://airbnb-raw/listings/<YYYY-MM-DD>/raw_listings.csv
sekundär · S3A

Processing

Spark Standalone

Liest/schreibt direkt auf MinIO-Objekten via S3A (path.style.access=true). Beispiel-Job: stock_transform (JSON → CSV).

master:7077 · UI :8082
workerUI :8081

Data Warehouse

PostgreSQL

Ziel-Tabelle der täglichen Loads. if_exists="replace" — jeder Lauf ersetzt den Tabelleninhalt vollständig.

public.listings

BI

Metabase

Dashboards direkt auf public.listings, keine eigene Transformationsschicht dazwischen.

localhost:3000 · Ersteinrichtung beim ersten Start

Docker-Compose-Services

Container & Ports

Definiert in docker-compose.override.yml, alle Services im Netz ndsnet

ServiceImagePorts
webserver / scheduler / triggererastro-runtime:12.9.08080
miniominio:RELEASE.2024-06-139000, 9001
spark-master./spark/master7077, 8082
spark-worker./spark/worker8081
metabasemetabase:v0.52.8.43000
docker-proxyalpine/socat2376

Airflow-Connections

Aus airflow_settings.yaml oder manuell in Admin → Connections

Conn IDTypZiel
minio_s3AWShttp://minio:9000
postgresPostgrespostgres:5432
listings_apiHTTPdata.insideairbnb.com