Lakebench
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
kubectlandhelmon 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 storageto 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
- Getting Started -- prerequisites, install, first run
- Configuration -- full YAML reference
- Recipes -- catalog + format + engine combinations
- Compatibility Matrix -- Spark, Iceberg, and Delta version support
- Running Pipelines -- batch and sustained modes
- Benchmarking -- scorecard and query benchmark
- Architecture -- system design
- Storage Backends -- validated S3 backends and conformance checks
- Troubleshooting -- common errors and fixes
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lakebench_k8s-1.5.0.tar.gz | 468.2 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.