Môi trường học PySpark hoàn chỉnh chạy ngay trên máy: cụm Spark (master + worker) để hiểu kiến trúc, JupyterLab để viết code, dữ liệu mẫu có sẵn, và nối được vào Kafka khi học Streaming.
| Service | Image | Vai trò |
|---|---|---|
| spark-master | bitnami/spark | Master của cụm standalone — điều phối job, hiện ở Spark Master UI |
| spark-worker | bitnami/spark | Worker chạy executor — nơi task thực sự xử lý dữ liệu |
| jupyter | jupyter/pyspark-notebook | Nơi bạn viết PySpark (mặc định chạy local[*]) |
local[*] (đủ học mọi khái niệm, kể cả streaming). Cụm master/worker dùng để nhìn thấy kiến trúc phân tán và submit job qua Spark UI.# vào thư mục lab cd ~/Downloads/spark-lab # kéo image + khởi động (lần đầu hơi lâu, ~2-3GB) docker compose up -d
Sau đó mở các UI:
| Thành phần | URL | Ghi chú |
|---|---|---|
| JupyterLab | localhost:8888 | Token đăng nhập: spark |
| Spark Master UI | localhost:8082 | Xem worker & ứng dụng đang chạy |
| Spark Worker UI | localhost:8084 | Tài nguyên của worker |
| Spark App UI | localhost:4040 | Chỉ hiện khi đang có job chạy |
Vào Jupyter → mở work/notebooks/01_basics.ipynb và chạy từng cell bằng Shift + Enter.
docker compose down — dữ liệu nằm trong folder data/ nên không mất.| File | Mô tả |
|---|---|
sales.csv | 50.000 giao dịch bán hàng — cố tình có vài dòng bẩn (qty âm) để học làm sạch dữ liệu |
customers.json | 1.000 khách hàng — dùng để học join |
events.jsonl | 10.000 event log, mỗi dòng 1 JSON (JSON-lines) — học đọc dữ liệu bán cấu trúc |
Sinh lại data bất cứ lúc nào: python data/gen_data.py
Bài Streaming đọc dữ liệu trực tiếp từ Kafka của cdc-lab. Cần bật cdc-lab trước (để có network cdc-net), rồi khởi động spark-lab kèm file override:
# 1. bật cdc-lab cd ~/Downloads/cdc-lab && docker compose up -d # 2. bật spark-lab + nối vào cdc-net cd ~/Downloads/spark-lab docker compose -f docker-compose.yml -f docker-compose.kafka.yml up -d
Trong notebook dùng bootstrap server kafka:9092.
wsl --shutdown trong PowerShell rồi mở lại Docker Desktop.