Skip to main content

OLake Playground

OLake Playground is a self-contained environment for exploring lakehouse architecture using Apache Iceberg. It comes preconfigured with all the required components, allowing you to experience the complete workflow without manual setup.

Objective​

Enable developers to experiment with an end-to-end, Iceberg-native lakehouse in minutes. Simply run a single Docker Compose docker-compose up command to launch the full stack β€” no service stitching, no configuration files required.

Included Components​

  • MySQL – Source database
  • OLake – Schema discovery and CDC ingestion via an intuitive UI
  • MinIO – Object store for data storage
  • Temporal – Workflow orchestration for ingestion processes
  • Presto – Query engine for Iceberg tables
  • Trino – Query engine for Iceberg tables
  • Spark – Query engine for Iceberg tables

Architecture:​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    MySQL    │───▢│    OLake    │───▢│   MinIO     β”‚
β”‚  (Source)   β”‚    β”‚ (Pipeline)  β”‚    β”‚ (Storage)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚                  β”‚
                    β–Ό                  β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
            β”‚ Iceberg     β”‚β—€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚ REST Catalogβ”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚
                    β–Ό
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚   Trino     β”‚
            β”‚ (Query UI)  β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Prerequisites​

  • Docker: Latest version installed and running

  • Docker Compose: Latest version installed (usually included with Docker Desktop)

  • Resources: Allocate sufficient memory and CPU to Docker (e.g., 8GB+ RAM recommended)

  • Port Availability: The following ports must be available on your system:

    • 8000 - OLake UI
    • 8088 - Trino query engine UI
    • 3000 - SQLPad UI
    • 3306 - MySQL database
    • 8181 - Iceberg REST catalog API
    • 8443 - MinIO console UI
    • 9090 - MinIO server API

    Note: If any of these ports are in use, stop the conflicting services or modify the port mappings in the docker-compose-v1.yml file.


Configuration & Set Up​

1. Start the demo stack​

Step 1: Start base Olake stack

curl -sSL https://raw.githubusercontent.com/datazip-inc/olake-ui/master/docker-compose-v1.yml | docker compose -f - up -d

Step 2: Navigate and start services

cd examples/trino-tablurarest-minio-mysql
docker compose up -d

2. Accessing Services​

  1. Log in to the Olake UI at http://localhost:8000 with credentials admin/password.

  2. Verify Source Data:

  • Access the MySQL CLI:

    docker exec -it primary_mysql mysql -u root -ppassword
  • Select the weather database and query the table:

    USE weather;
    SELECT * FROM weather LIMIT 10;

    This will display the first 10 rows of the weather table.

  1. Create and Configure a Job:

    Create a Job to define and run the data pipeline:

    • On the main page, click on the "Create your first Job" button. Please make sure to set the job name as job and select a replication frequency.

    • Set up the Source:

      • Connector: MySQL
      • Version: choose the latest available version
      • Name of your source: olake_mysql
      • Host: host.docker.internal
      • Port: 3306
      • Database: weather
      • Username: root
      • Password: password
      • SSH Config: No Tunnel
      • Update Method: Standalone Setting up Source Configuration
    • Set up the Destination:

      • Connector: Apache Iceberg
      • Catalog: REST Catalog
      • Name of your destination: olake_iceberg
      • Version: choose the latest available version
      • Iceberg REST Catalog URL: http://host.docker.internal:8181
      • Iceberg S3 Path: s3://warehouse/weather/
      • S3 Endpoint (for Iceberg data files written by Olake workers): http://host.docker.internal:9090
      • AWS Region: us-east-1
      • S3 Access Key: minio
      • S3 Secret Key: minio123 Setting up Destination Configuration
    • Select Streams to sync:

      • Make sure that the weather table has been selected for the sync.
      • Click on the weather table and make sure that the Normalisation is set to true using the toggle button.
    • Save and Run the Job:

      • Save the job configuration.
      • Run the job manually from the UI to initiate the data pipeline from MySQL to Iceberg by clicking Sync now.

3. Query in Trino​

  1. Access Trino UI: http://localhost:3000 using credentials admin/password
  2. Run Queries via SQLPad UI:
  • On the top left, select OLake Demo as the database
  • Click on the refresh button to reload the database schemas
  • Click on job_weather schema and the weather table under it will be listed
  • Query example:
    SELECT station_state, AVG(temperature_avg) as avg_temp
    FROM job_weather.weather
    GROUP BY station_state
    ORDER BY avg_temp DESC
    LIMIT 10;
    Trino UI
  • (Optional) Run Queries via Trino CLI:
    docker exec -it olake-trino-coordinator trino \
    --catalog iceberg --schema job_weather \
    --execute "SELECT * from weather LIMIT 10;"

Service Validation​

1. View Logs​

# All services
docker compose logs -f

# Specific service
docker compose logs -f trino

2. Check Service Status​

# Make sure all services are running
docker compose ps

3. Verify Data Load​

# Connect to MySQL
docker exec -it primary_mysql mysql -u root -ppassword weather

# Check weather table
SELECT COUNT(*) FROM weather;
SELECT * FROM weather LIMIT 5;

4. Test Trino Connection​

# Check if Trino can see Iceberg tables
docker exec -it olake-trino-coordinator trino \
--catalog iceberg --schema job_weather \
--execute "SHOW TABLES;"

Troubleshooting​

1. Trino can't connect to Iceberg:​

  • Ensure the data pipeline in OLake has run successfully
  • Check that MinIO bucket contains data: http://localhost:8443
  • Verify Iceberg REST catalog is responding: http://localhost:8181/v1/namespaces

2. MySQL connection issues:​

  • Wait for init-mysql-tasks to complete data loading
  • Check MySQL logs: docker compose logs primary_mysql

3. MinIO access issues:​

  • Check MinIO credentials in docker-compose-v1.yml match OLake destination config
  • Verify bucket permissions in MinIO console

Cleanup​

Step 1: Stop this example

docker compose down

Step 2: Stop base OLake stack

curl -sSL https://raw.githubusercontent.com/datazip-inc/olake-ui/master/docker-compose-v1.yml | docker compose -f - down


πŸ’‘ Join the OLake Community!

Got questions, ideas, or just want to connect with other data engineers?
πŸ‘‰ Join our Slack Community to get real-time support, share feedback, and shape the future of OLake together. πŸš€

Your success with OLake is our priority. Don’t hesitate to contact us if you need any help or further clarification!