Skip to main content

Lakebench

Python 3.10+ License

A/B testing for lakehouse architectures on Kubernetes.

Deploy a complete lakehouse stack from a single YAML, run a medallion pipeline at any scale, and get a scorecard you can compare across configurations.

Why Lakebench?

  • Compare stacks. Swap catalogs (Hive, Polaris), query engines (Trino, Spark Thrift, DuckDB), and table formats -- same data, same queries, different architecture. Side-by-side scorecard comparison.
  • Test at scale. Run the same workload at 10 GB, 100 GB, and 1 TB to find where throughput plateaus or resources saturate on your hardware.
  • Measure freshness. Sustained mode streams data through the pipeline and benchmarks query performance under sustained ingest load.

Quick Start

pip install lakebench-k8s

Pre-built binaries (no Python required) are available on GitHub Releases.

pip install lakebench-k8s
lakebench init                           # quick setup (4 questions)
lakebench run lakebench.yaml --generate  # deploy + generate + pipeline + benchmark
lakebench results                        # view scorecard
lakebench destroy lakebench.yaml         # tear down everything

Minimum config -- 4 lines:

# lakebench.yaml
endpoint: http://s3.example.com:80
access_key: YOUR_KEY
secret_key: YOUR_SECRET
scale: 10                          # 1 = ~10 GB, 10 = ~100 GB, 100 = ~1 TB

Name is auto-generated. Recipe defaults to hive-iceberg-spark-trino. Override anything with flat fields or nested YAML:

# lakebench.yaml (with overrides)
name: flashblade-polaris
recipe: polaris-iceberg-spark-trino
endpoint: http://10.21.227.93:80
access_key: ${S3_ACCESS_KEY}       # env var substitution
secret_key: ${S3_SECRET_KEY}
scale: 50
mode: batch
spark_image: apache/spark:4.1.1-python3

Eleven recipes are available -- see Recipes for the full list.

Compare two configurations side-by-side:

lakebench compare config-hive.yaml config-polaris.yaml

For all recipes, see examples/ or run lakebench init --advanced for the full interactive wizard.

What You Get

After lakebench run completes, the terminal prints a scorecard:

 ─ Pipeline Complete ──────────────────────────────
  bronze-verify         142.0 s
  silver-build          891.0 s
  gold-finalize         234.0 s
  benchmark              87.0 s

  Scores
    Time to Value:        1354.0 s
    Throughput:           0.782 GB/s
    Efficiency:           3.41 GB/core-hr
    Scale:                100.0% verified
    QpH:                  2847.3

  Full report: lakebench report
 ──────────────────────────────────────────────────

lakebench report generates an HTML report with per-query latencies, bottleneck analysis, and optional platform metrics (CPU, memory, S3 I/O per pod).

How It Works

                    ┌──────────────────────────────────┐
                    │         lakebench.yaml           │
                    └────────────┬─────────────────────┘
                                 │
                    ┌────────────▼─────────────────────┐
                    │   deploy (Kubernetes namespace,   │
                    │   S3 secrets, PostgreSQL, catalog, │
                    │   query engine, observability)     │
                    └────────────┬─────────────────────┘
                                 │
     Raw Parquet ──► Bronze (validate) ──► Silver (enrich) ──► Gold (aggregate)
         S3              Spark                Spark               Spark
                                                                    │
                                                        ┌───────────▼──────────┐
                                                        │  8-query benchmark   │
                                                        │  (Trino / DuckDB /   │
                                                        │   Spark Thrift)      │
                                                        └──────────────────────┘

Prerequisites

  • kubectl and helm on PATH
  • Kubernetes 1.26+ with capacity for the Spark job profiles. Scale 1 requests a peak of 36 cores and 512 GB RAM (driven by silver-build), and a single executor pod needs 60 GB on one node. See Getting Started for the full table. Lakebench fails fast if the cluster is too small.
  • S3-compatible object storage. FlashBlade and Garage are validated; others are expected to work. Run lakebench config storage to check yours. See Storage Backends.
  • Kubeflow Spark Operator 2.5.1+ (or set spark.operator.install: true)
  • Stackable Hive Operator for Hive recipes (not needed for Polaris)

Commands

Command Description
init Generate a starter config file
validate Check config and cluster connectivity
config storage Check the S3 backend supports what lakebench needs
info Show deployment configuration summary
deploy Deploy all infrastructure components
generate Generate synthetic data at the configured scale
run Execute the medallion pipeline and benchmark
benchmark Run the 8-query benchmark standalone
query Execute ad-hoc SQL against the active engine
status Show deployment status
report Generate HTML scorecard report
recommend Recommend cluster sizing for a scale factor
destroy Tear down all deployed resources

See CLI Reference for flags and options.

Component Versions

Component Version
Apache Spark 3.5.4, 4.0.2, 4.1.1
Spark Operator 2.5.1 (Kubeflow)
Apache Iceberg 1.11.0
Delta Lake 4.0.0 / 4.1.0 (auto, by Spark version)
Hive Metastore 3.1.3 (Stackable 25.7.0)
Apache Polaris 1.6.0
Trino 483
DuckDB bundled (Python 3.11)
PostgreSQL 16, 17, 18

All versions are overridable in the YAML config. See Supported Components.

Documentation

License

Apache 2.0

Metadata

Release files for lakebench-k8s 1.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lakebench-k8s 1.5.0
File Size Uploaded Provenance
lakebench_k8s-1.5.0.tar.gz 468.2 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for lakebench-k8s 1.5.0
File Interpreter ABI Platform
lakebench_k8s-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 900.7 kB

Release files / lakebench_k8s-1.5.0.tar.gz

Download URL lakebench_k8s-1.5.0.tar.gz
Size 468.2 kB
Tags Source
SHA-256 checksum
How to use checksums
74c8a6f29fb6fb3d483457bb7d910c34a3fc181dc867a6f76148da7ccd6dd390
BLAKE2b-256 checksum
How to use checksums
abc9f1f8a1c82714a6aa0a8a8faaef2bf4e4d7385f24692ba3d7c1b8ce41a227
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / lakebench_k8s-1.5.0-py3-none-any.whl

Download URL lakebench_k8s-1.5.0-py3-none-any.whl
Size 432.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
102f8ad4cbddb11a6101bcdc2a9eb79959fe3314db7d56a083fc3f349aeb9c66
BLAKE2b-256 checksum
How to use checksums
83d9981af7f78701541569c42f61b4b992f5da4d1053ede0737eed54f11954e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Security for lakebench-k8s 1.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for lakebench_k8s-1.5.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.5.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page