7.1. Overview¶
This directory documents the production Spark applications in the data-eng-lab lakehouse. Each application is a Maven-built Scala Spark project with a Jenkins pipeline for build, test, package, and publication, plus an Airflow DAG that uses an operator-owned SparkSubmitOperator subclass and Atlas's RestConfirmingSparkHook adapter.
The NYC Taxi applications form a sequence from Bronze to Silver and Gold. The independent TPC-H and MovieLens applications each build two Gold tables from one complete verified publication and record equal provenance on both outputs. The GH Archive application runs two serialized Silver stages from one immutable publication and verifies the flatten-stage provenance before sessionization reads it.
1. Overview¶
| Application | Description | Source | Target | DAG |
|---|---|---|---|---|
| nyc-taxi-etl | Raw Parquet → Bronze Iceberg with quality filtering | resolver-verified immutable NYC Taxi generation | lakehouse.bronze.nyc_taxi_trips |
nyc_taxi_etl |
| nyc-taxi-medallion | Bronze → Silver dedup → Gold daily aggregation | lakehouse.bronze.nyc_taxi_trips |
lakehouse.silver.*, lakehouse.gold.* |
nyc_taxi_medallion |
| nyc-taxi-data-quality | Stable Bronze snapshot → null-safe Silver split and governed facts | lakehouse.bronze.nyc_taxi_trips |
lakehouse.silver.nyc_taxi_{clean,quarantine}, lakehouse.gold.nyc_taxi_quality_facts |
nyc_taxi_data_quality |
| tpch-star-schema | Verified TPC-H → customer dimension and order fact | immutable TPC-H generation | lakehouse.gold.dim_customer, lakehouse.gold.fct_orders |
tpch_star_schema |
| movielens-feature-pipeline | Verified MovieLens ratings → user and movie aggregates | immutable MovieLens generation | lakehouse.gold.ml_user_features, lakehouse.gold.ml_movie_features |
movielens_feature_pipeline |
| gh-archive-pipeline | Verified GH Archive JSON → typed events → actor sessions | immutable GH Archive generation | lakehouse.silver.gh_events, lakehouse.silver.gh_sessions |
gh_archive_flatten_sessionization |
2. CI/CD Pipeline¶
All six apps follow the same CI/CD pattern:
- CI: Jenkins runs
mvn test, thenmvn package, and publishes the local Maven artifact to the stable MinIO objects3a://jars/<app>/0.1.0/app.jar. - CD: Airflow's
SparkSubmitOperatorsubmits the object in Spark standalone cluster mode with the Iceberg catalog configuration; its hook is wrapped by Atlas's adapter to confirm the completed driver through the Spark REST endpoint. - The JAR output is consumed by downstream scenarios or serves as the final medallion-layer output.
The POMs mark Spark as provided. The Atlas Spark image supplies the Spark, S3A, and Iceberg runtime used by the cluster driver.
GitHub SCM
│
▼
Jenkins CI
mvn test → mvn package → shaded JAR
│
▼
MinIO (/jars/<app>/0.1.0/app.jar)
│
▼
Airflow (SparkSubmitOperator + REST-confirming hook, cluster mode)
│
▼
Spark Cluster (reads from/sinks to Iceberg tables in S3)
3. Prerequisites¶
- Atlas A5 (Jenkins CI) + A6 (Airflow spark-submit CD)
mvninstalled locally for testing- S3A credentials configured on the Spark cluster (for Iceberg catalog access)
- Jenkins MinIO endpoint and Iceberg credentials; each Jenkinsfile creates its
atlasalias - Iceberg catalog configuration on the Spark cluster (
spark.sql extensions, warehouse path, catalog type)