Version 2.1.0 - Get your complete modern data engineering learning environment running in 15 minutes! Perfect for data engineering students, CS labs, educational institutions, and learning enterprise-grade technologies in a classroom-friendly environment.
⚠️ Critical: Always use./install.shfor new installations. Directdocker compose up -dwill fail without proper credentials and initialization!
One-Command Install - Perfect for Students & Educators:
curl -sSL https://raw.githubusercontent.com/karstom/lakehouse-lab/main/install.sh | bashMulti-User Installation for Classrooms & Labs:
# Standard installation with multi-user capabilities
curl -sSL https://raw.githubusercontent.com/karstom/lakehouse-lab/main/install.sh | bashgit clone https://github.com/karstom/lakehouse-lab.git
cd lakehouse-lab
# Individual/educational setup
./install.sh
# OR High-performance setup for CS labs (32+ cores, 64GB+ RAM)
./install.sh --fat-server# Configure services and choose your deployment mode
./scripts/setup-wizard.sh
# Or use presets
./scripts/setup-wizard.sh --minimal # 8GB RAM - Basic learning environment
./scripts/setup-wizard.sh --analytics # 14GB RAM - BI/Dashboard focus
./scripts/setup-wizard.sh --ml # 16GB RAM - AI/ML coursework
./scripts/setup-wizard.sh --full # 20GB RAM - Complete curriculumFor educational environments, enable multi-user JupyterHub for student collaboration:
# After installation, enable multi-user JupyterHub
docker compose -f docker-compose.yml -f docker-compose.jupyterhub.yml up -d
# Provision team members
./scripts/provision-user.sh john.doe john.doe@company.com SecurePass123 analyst
./scripts/provision-user.sh jane.smith jane.smith@company.com AnotherPass456 adminJupyterHub Features for Education:
- 👥 Multi-user environment with containerized isolation per student
- 🔗 Spark integration automatically configured for all students
- 📁 Shared notebooks (readonly course materials + collaborative workspace)
- 🔐 Student authentication with role-based access control
- 📊 Resource management with per-student CPU and memory limits
Access JupyterHub: http://localhost:9041
The installer handles critical setup that Docker Compose can't do alone:
- 🔐 Generates secure credentials in
.envfile - 🔧 Sets proper script permissions
- 📊 Optimizes resources for your system
- 🚀 Performs initialization and health checks
# Watch containers start
docker compose ps
# Monitor initialization
docker compose logs -f lakehouse-initInitialization takes 3-5 minutes. You'll see a success message when complete!
Once startup completes, access these URLs:
| Service | URL | Purpose | Credentials |
|---|---|---|---|
| Portainer | http://localhost:9060 | Container Management | Create admin user |
| JupyterLab | http://localhost:9040 | Single-User Notebooks | 🔐 Generated |
| JupyterHub | http://localhost:9041 | Multi-User Notebooks | User accounts |
| MinIO Console | http://localhost:9001 | Object Storage | 🔐 Generated |
| Spark Master | http://localhost:8080 | Processing Engine | N/A |
| PostgreSQL | localhost:5432 | Analytics Database | 🔐 Generated |
| Service | URL | Purpose | Credentials |
|---|---|---|---|
| Apache Superset | http://localhost:9030 | BI & Dashboards | 🔐 Generated |
| Apache Airflow | http://localhost:9020 | Workflow Orchestration | 🔐 Generated |
| Vizro Dashboards | http://localhost:9050 | Interactive Dashboards | 🔐 Generated |
| LanceDB API | http://localhost:9080 | Vector Database | API Access |
Lakehouse Lab now generates unique, secure credentials for every installation! No more default passwords.
./scripts/show-credentials.shThis shows all your service URLs and login credentials in a clean, copy-paste ready format with memorable passphrases like swift-river-bright-847.
- Visit http://localhost:9030
- Get credentials: Run
./scripts/show-credentials.shto see your Superset login - Login with your generated credentials (format: admin / memorable-passphrase)
- Go to SQL Lab
✅ Ready for Learning: The DuckDB connection is pre-configured for immediate educational use!
The database connection "DuckDB-S3" should appear automatically with:
- URI:
duckdb:////app/superset_home/lakehouse.duckdb(fixed persistent file) - S3 Config: Pre-configured for MinIO access
- DML/DDL: Enabled (CREATE TABLE, INSERT, UPDATE, DELETE allowed)
- File Uploads: Enabled for CSV import
- Async Queries: Enabled for better performance
🔧 If you don't see "DuckDB-S3":
- Refresh the page or try Data → Database Connections
- If still not there, see the Superset Database Setup Guide for manual creation steps
✅ Educational Ready: S3 configuration is persistent - perfect for learning sessions!
Simply run your analytics queries:
-- Query sample orders data directly
SELECT * FROM read_csv_auto('s3://lakehouse/raw-data/sample_orders.csv')
LIMIT 10;
-- Analytics query
SELECT
product_category,
COUNT(*) as total_orders,
ROUND(SUM(total_amount), 2) as total_revenue,
ROUND(AVG(total_amount), 2) as avg_order_value
FROM read_csv_auto('s3://lakehouse/raw-data/sample_orders.csv')
GROUP BY product_category
ORDER BY total_revenue DESC;🎓 You just learned lakehouse analytics with zero configuration complexity!
✅ Learning: Use single SELECT statements following data engineering best practices
- In Superset, go to Data → Datasets → + Dataset
- Database: DuckDB-S3
- Dataset Type: SQL
- SQL: Use ONLY a single SELECT statement:
SELECT
product_category,
COUNT(*) as order_count,
SUM(total_amount) as revenue,
AVG(total_amount) as avg_order_value
FROM read_csv_auto('s3://lakehouse/raw-data/sample_orders.csv')
GROUP BY product_category- Save as "Sales Analysis"
- Click Create Chart from your dataset
- Chart Type: Bar Chart
- Metrics: revenue
- Dimensions: product_category
- Run Query → Save
- Go to Dashboards → + Dashboard
- Edit Dashboard → Add Charts
- Add your chart and arrange
- Save Dashboard
✨ Educational: Learn modern, responsive dashboard development!
- Visit http://localhost:9050
- Get credentials: Run
./scripts/show-credentials.sh - Explore pre-built sample dashboards
- Sample Dashboard:
/sample-dashboardwith sales analytics - Real-time Updates: Live data from PostgreSQL and MinIO
- Interactive Filtering: Dynamic filters and drill-down capabilities
- Responsive Design: Works on desktop, tablet, and mobile
# Edit dashboard configuration
nano config/dashboards/custom-dashboard.yaml# Example Vizro dashboard configuration
pages:
- title: "Sales Analytics"
components:
- title: "Revenue Trends"
type: "graph"
figure:
data: "SELECT * FROM analytics.daily_sales"
x: "date"
y: "revenue"✨ Educational: Learn high-performance vector operations for AI/ML!
- API available at http://localhost:9080
- Pre-loaded with sample embeddings and vectors
import requests
import numpy as np
# Store vectors
vectors = np.random.rand(100, 128).tolist() # Sample embeddings
response = requests.post('http://localhost:9080/api/vectors', json={
"table": "product_embeddings",
"vectors": vectors,
"metadata": [{"product_id": i, "category": "electronics"} for i in range(100)]
})
# Semantic similarity search
query_vector = np.random.rand(128).tolist()
response = requests.post('http://localhost:9080/api/search', json={
"table": "product_embeddings",
"vector": query_vector,
"limit": 5
})
similar_products = response.json()✅ Ready for Learning: DuckDB packages are pre-installed for immediate use
- Visit http://localhost:9040
- Get token: Run
./scripts/show-credentials.shto see your JupyterLab token - Enter your generated token (format: memorable-passphrase)
- DuckDB 1.3.2 and all dependencies are ready to use!
Create a new notebook and run:
import duckdb
import pandas as pd
import matplotlib.pyplot as plt
# Connect to DuckDB with S3 configuration
conn = duckdb.connect()
# Configure S3 access for learning environment
conn.execute("""
INSTALL httpfs; LOAD httpfs;
SET s3_endpoint='minio:9000';
SET s3_access_key_id='admin'; -- Default username for educational setup
SET s3_secret_access_key='YOUR_MINIO_PASSWORD'; -- Get from ./scripts/show-credentials.sh
SET s3_use_ssl=false;
SET s3_url_style='path';
""")
# Query and visualize
df = conn.execute("""
SELECT
product_category,
SUM(total_amount) as revenue
FROM read_csv_auto('s3://lakehouse/raw-data/sample_orders.csv')
GROUP BY product_category
ORDER BY revenue DESC
""").fetchdf()
# Create visualization
df.plot(x='product_category', y='revenue', kind='bar', figsize=(10, 6))
plt.title('Revenue by Product Category')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# Check versions
print(f"DuckDB version: {duckdb.__version__}") # Should show 1.3.2✨ NEW: Comprehensive tutorial notebooks designed for learning!
Available Learning Notebooks:
01_Getting_Started.ipynb- Introduction to the lakehouse environment02_PostgreSQL_Analytics.ipynb- Database analytics and SQL integration04_Vizro_Interactive_Dashboards.ipynb- Modern dashboard creation05_LanceDB_Vector_Search.ipynb- Vector database and semantic search06_Advanced_Analytics_Vizro_LanceDB.ipynb- Combined AI-powered analyticssimple_working_dashboard.py- Interactive dashboard development
Educational Features:
- 🎨 Interactive Learning: Step-by-step tutorials with hands-on examples
- 🤖 AI/ML Concepts: Learn semantic clustering, UMAP visualization, and TF-IDF analysis
- 📊 Data Engineering: Revenue trends, customer analysis, and business metrics
- 🎓 Learning-Focused: Clear explanations with educational best practices
Quick Start:
# In any Jupyter notebook, run the dashboard demo:
# Path will be available after initialization
exec(open('/home/jovyan/notebooks/simple_working_dashboard.py').read())
display_dashboard()By default, Lakehouse Lab provides secure single-user access perfect for individual learning:
- All services use generated credentials (run
./scripts/show-credentials.shto view) - Each service has its own authentication system
- Perfect for individual students and small learning groups
For classroom and lab environments, use JupyterHub for multi-user collaboration:
# Enable multi-user JupyterHub
docker compose -f docker-compose.yml -f docker-compose.jupyterhub.yml up -d
# Add students/users
./scripts/provision-user.sh student1 student1@university.edu SecurePass123 student
./scripts/provision-user.sh professor professor@university.edu AdminPass456 admin- student: Access to JupyterHub, shared notebooks, course materials
- instructor: Full notebook access, can create/modify course content
- admin: System administration, user management, all services
✅ Educational: Pre-configured DAGs ready for learning workflow orchestration
- Visit http://localhost:9020
- Get credentials: Run
./scripts/show-credentials.shto see your Airflow login - Login with your generated credentials (format: admin / memorable-passphrase)
sample_duckdb_pipeline- Now works without import errors!data_quality_checks- Data validation pipeline
- Find
sample_duckdb_pipeline - Toggle ON
- Click Trigger DAG
- Watch execution in Graph View - should complete successfully!
- Visit http://localhost:9001
- Get credentials: Run
./scripts/show-credentials.shto see your MinIO login - Login with your generated credentials (format: admin / strong-password)
- Bucket:
lakehouse - Folders:
raw-data/- Input CSV files (sample_orders.csv included)warehouse/- Processed dataprocessed-data/- Analytics results
- Click Upload → Upload File
- Choose CSV files
- Upload to
raw-data/folder - Query immediately with DuckDB!
- Visit http://localhost:9060 (Portainer)
- Create admin user
- View all containers, logs, and stats
# Command line monitoring
docker stats --no-stream
# Or use Portainer web interface for visual monitoring# Check specific service
docker compose logs superset
# Follow logs in real-time
docker compose logs -f jupyter-- Query multiple files with same schema
SELECT * FROM read_csv_auto('s3://lakehouse/raw-data/orders_*.csv');
-- Handle different schemas
SELECT * FROM read_csv_auto('s3://lakehouse/raw-data/*.csv', union_by_name=true);
-- Cross-format queries
SELECT * FROM read_parquet('s3://lakehouse/warehouse/*.parquet')
UNION ALL
SELECT * FROM read_csv_auto('s3://lakehouse/raw-data/*.csv');SELECT
DATE_TRUNC('month', order_date::DATE) as month,
COUNT(*) as orders,
SUM(total_amount) as revenue
FROM read_csv_auto('s3://lakehouse/raw-data/sample_orders.csv')
GROUP BY month
ORDER BY month;✅ Persistent Configuration: Superset S3 settings maintained across sessions
✅ Working Examples: All Airflow DAGs configured and functional
✅ Best Practices: Single query patterns for dataset creation
✅ Modern Stack: DuckDB 1.3.2 + duckdb-engine 0.17.0 for current industry practices
# Services not starting
docker compose ps
docker compose logs [service-name]
# Memory issues - check usage
docker stats
# Complete reset if needed
docker compose down -v
sudo rm -rf lakehouse-data/
docker compose up -dIf you need to manually update the Superset DuckDB connection for learning purposes:
- Go to Settings → Database Connections
- Edit "DuckDB-S3"
- Ensure SQLAlchemy URI:
duckdb:////app/superset_home/lakehouse.duckdb - Test Connection should work immediately - perfect for educational demos
After completing this Version 2.1.0 quickstart, you've gained hands-on experience with:
✅ Modern Data Engineering Platform - Complete analytics stack for learning
✅ Interactive Dashboard Development - Vizro framework with live data
✅ Vector Database Concepts - LanceDB for semantic search and AI/ML applications
✅ Cloud-Native Storage - S3-compatible object storage with DuckDB integration
✅ Workflow Orchestration - Airflow DAGs for data pipeline automation
✅ Modern Analytics Stack - DuckDB 1.3.2 + Vector database + AI integration
✅ Multi-User Collaboration - JupyterHub for team-based data science
✅ Lakehouse Architecture - Modern data lake + warehouse + vector database patterns
✅ Educational Best Practices - Comprehensive learning environment for data engineering
- Add Your Data: Upload CSV/Parquet files to MinIO
- Build ML Models: Use LanceDB for vector embeddings and semantic search
- Create Dashboards: Build interactive Vizro dashboards
- Experiment & Learn: Safe environment for data engineering practice
- Setup Multi-User: Configure JupyterHub for classroom collaboration
- Manage Students: Assign roles and control access to course materials
- Monitor Progress: Track student usage and learning activities
- Scale Resources: Use high-performance configuration for computer labs
- Vector Search: Build recommendation systems and semantic search applications
- Real-time Analytics: Create streaming dashboards and live data visualization
- Distributed Computing: Explore Spark for large-scale data processing
- Data Pipeline Design: Learn ETL/ELT patterns with Airflow orchestration
Happy Learning and Data Engineering! 🚀🎓
Your educational lakehouse environment is now ready for comprehensive data engineering learning and experimentation!