▦ Distributed Compute Lab

Read, predict, execute, explain

Two university courses supply complementary foundations: Berkeley CS267 for parallel machines, communication and load balance; MIT 6.5840 for distributed-system failure and MapReduce. Neither substitutes for the pinned Spark 3.5.8 implementation guides. Choose these relevant units instead of treating an entire graduate course as a prerequisite for this introductory Lab.

The reviewed catalogue below is searchable in both languages and downloadable as structured JSON. Each learning unit names a particular lecture, paper section or assignment specification and a separate original runnable exercise. Predict the result before running, verify the stated invariant, then explain the observed plan and counters. The mapping does not grant credit or reproduce a university assignment solution.

Verification date: 14 November 2026, Asia/Shanghai. Published material is distinguished from tentative schedules. The CS267 2016 archive is deliberately historical; its hardware figures are not 2026 capacity advice. The 2025 official page says its videos require a Berkeley login. MIT's selected Spring 2026 Lecture 1 notes and Lab 1 specification are already published, while its schedule retains a tentative label. Public reading access is separate from enrollment, grading and tuition. No private course account or paid material is used.

From the project root, search without a browser or service:

python scripts/search_resources.py MapReduce
python scripts/search_resources.py --unit 05-recovery
python scripts/search_resources.py 倾斜

MIT's collaboration policy forbids publishing lab solutions. Read the official policy before attempting its Go assignment privately. Our examples do not use its starter code or implement its assignment coordinator. Third-party material remains upstream under its own terms; this repository stores links, bibliographic facts and original learning tasks.

Download structured catalogue (JSON)

Selected university courses

University of California, Berkeley · CS267

Applications of Parallel Computers · Spring 2016

published archive · Verified 2026-11-14

Prerequisites: Conventional programming and mathematics for the application algorithms; this is a parallel-computing course, not a Spark API course.

Public reading: Course outline and linked lecture PDFs are readable without an account. We checked the selected PDFs, not every archived video.

Enrollment / fees: Self-study of these public files needs no registration or purchase. University credit, staff support and historical machine accounts are separate; no current enrollment or fee offer is asserted.

Edition and limits: 2016 archive. Hardware and cloud figures are historical; retain the communication, granularity and locality questions. The 2025 official page exists but says videos require a Berkeley login; it is not substituted for this open archive.

2025 access context

Massachusetts Institute of Technology · 6.5840

Distributed Systems · Spring 2026

published materials (schedule labels itself tentative) · Verified 2026-11-14

Prerequisites: Official prerequisites: 6.1910 (6.004), plus 6.1800 (6.033) or 6.1810, or equivalent; substantial programming experience helps. Lab 1 uses Go.

Public reading: Lecture 1 notes, schedule, MapReduce paper and Lab 1 specification are public. Selected 2026 materials were available on the verification date; a tentative schedule alone is not proof of a future lecture.

Enrollment / fees: Reading the public pages is free and needs no course login. MIT assessment/credit and course systems require their own enrollment; this Lab offers neither. Fees were not independently verified.

Edition and limits: 2026 teaching materials include the 2004 MapReduce classic. Our Spark task exception exercise is narrower than MIT's multi-process worker-crash assignment.

Official collaboration policy

Reading → prediction → runnable exercise

01-parallel · Work, slots and granularity

python scripts/run_all.py --only parallel

Predict first: With two slots, predict whether 64 tiny tasks beat eight. Explain why task count does not mean 64 cores.

Evidence to defend: Every result equals independent sum 119516556; inspect 1/8/64 TaskEnd attempts and all timings.

Limits: local[2,2], one JVM; neither the cost widget nor the run proves machine scaling.

Original Lab exercise; upstream assignment solutions are not included.

02-model · MapReduce to DAG and stages

python scripts/run_all.py --smoke --only aggregation

Predict first: Draw map-side work, exchange and reduce-side work before running. Which dependency causes a stage boundary?

Evidence to defend: Find ShuffledRDD in both saved lineages and two task stages in each measured group; output still matches all key totals.

Limits: This RDD trace illustrates the model; it does not implement MIT Lab 1 or its RPC coordinator.

Original Lab exercise; upstream assignment solutions are not included.

03-aggregation · Mergeable summaries before movement

python scripts/run_all.py --only aggregation

Predict first: Explain why summing locally preserves a monoid; why averaging local means without counts fails.

Evidence to defend: Compare the full 1,000-key oracle and Shuffle bytes; distinguish serialized batches from source records.

Limits: Local Shuffle bytes measure engine serialization, not cross-host network traffic.

Original Lab exercise; upstream assignment solutions are not included.

04-join · Skew, replication and the long tail

python scripts/run_all.py --only join

Predict first: Predict the hottest output partition under 80% hot-key skew; what extra work does salting add?

Evidence to defend: All variants: 240000 rows, weighted sum 384001; compare partition histograms and SortMergeJoin/BroadcastHashJoin plans. Keep the slower salted observation.

Limits: Unique dimension keys. The old join plans are pre-action strategy evidence, not final AQE plans; AQE skew join remains untested.

Original Lab exercise; upstream assignment solutions are not included.

05-recovery · Determinism, retry and lineage

python scripts/run_all.py --only recovery

Predict first: Which result survives one task exception? What changes when a cache block is removed?

Evidence to defend: One failed then successful partition-0 attempt; evaluations 8/0/8; ReliableCheckpointRDD truncates lineage.

Limits: No killed executor or host. Local checkpoint cannot survive host loss; this is weaker than MIT worker-crash testing.

Original Lab exercise; upstream assignment solutions are not included.

06-resources · Memory hierarchy and diagnosis

python scripts/run_all.py --only resources

Predict first: Will more partitions change the working set even with unchanged slots? Distinguish CPU caches from persisted RDD storage.

Evidence to defend: Validate sorted payloads, row count and ID sum; inspect nonzero real Spill and per-task memory counters.

Limits: Spill is forced by 8192 elements, not natural OOM; task peak execution memory is not process RSS.

Original Lab exercise; upstream assignment solutions are not included.

07-aqe · Observe a final adaptive plan

python scripts/run_aqe.py

Predict first: Predict why merely enabling AQE may leave 32 reducers, and whether 1-byte versus 1-MiB targets produce the same final plan.

Evidence to defend: Full per-key count/sum oracle; compare pre/final plans, AQEShuffleRead SQL metrics and actual TaskEnd stages. Run the 1-byte counterexample in the walkthrough.

Limits: Only post-shuffle coalescing is implemented. Join adaptation, distributed training and inference remain reading extensions.

Original Lab exercise; upstream assignment solutions are not included.

Inspectable source registry

CS267 Lecture 1: Introduction

lecture · 2016 · Public reading / verified 2026-11-14

CS267 Lecture 2: Single Processor Machines: Memory Hierarchies and Processor Features

lecture · 2016 · Public reading / verified 2026-11-14

CS267 Lecture 3: Parallel Machines and Programming Models

lecture · 2016 · Public reading / verified 2026-11-14

CS267 Lecture 9: Cloud Computing and Big Data Processing

lecture · 2016 · Public reading / verified 2026-11-14

CS267 Lecture 23: Dynamic Load Balancing

lecture · 2016 · Public reading / verified 2026-11-14

Linked from the 12 April 2016 course entry; some reused slides carry 2012 dates and different lecture numbering.

6.5840 2026 Lecture 1: Introduction

lecture notes · 2026 · Public reading / verified 2026-11-14

6.5840 Lab 1: MapReduce

assignment specification · 2026 · Public reading / verified 2026-11-14

Read the specification only. Do not publish a solution; the upstream collaboration policy forbids it. Our exercises do not use the assignment starter or implement its coordinator.

MapReduce: Simplified Data Processing on Large Clusters

original paper · 2004 · Public reading / verified 2026-11-14

Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing

original paper · 2012 · Public reading / verified 2026-11-14

Apache Spark 3.5.8 RDD Programming Guide

official implementation guide · Spark 3.5.8 · Public reading / verified 2026-11-14

Version-pinned implementation reference, not a university course.

Apache Spark 3.5.8 SQL Performance Tuning

official implementation guide · Spark 3.5.8 · Public reading / verified 2026-11-14

Read Adaptive Query Execution and Coalescing Post Shuffle Partitions. Other AQE features are untested here.

Apache Spark 3.5.8 Tuning Guide

official implementation guide · Spark 3.5.8 · Public reading / verified 2026-11-14

ZeRO: Memory Optimizations Toward Training Trillion Parameter Models

AI extension / original paper · 2020 · Public reading / verified 2026-11-14

First preprint 2019; selected v3 revised 2020. Reading extension, not an implemented training benchmark.

Orca: A Distributed Serving System for Transformer-Based Generative Models

AI extension / original paper · 2022 · Public reading / verified 2026-11-14

Published OSDI 2022. Read iteration-level scheduling for variable-length requests; no inference engine runs in this Lab.

AI reading bridge · not implemented

Training: read ZeRO (2019 preprint, selected 2020 v3). Relate state sharding to per-worker memory and collective communication; data shards and optimizer-state shards are different. Write which values each rank owns, and when they must move. Spark aggregation is a prerequisite reasoning exercise, not a ZeRO implementation or GPU benchmark.

Inference: read Orca (OSDI 2022), especially iteration-level scheduling. Relate variable request lengths to the long-tail and task-granularity questions from Join skew and AQE. Explain why a request can finish while its batch peers continue. Tail latency, token throughput, GPU collectives and serving correctness were not measured; this Lab runs no model and makes no LLM evaluation claim.

These are already published primary papers, not a forecast or a claim to cover the latest 2026 systems. No paid calls or credentials are needed.