▦ Distributed Compute Lab

阅读、预测、执行、解释

两门大学课程提供互补基础:Berkeley CS267 讲并行机器、通信与负载均衡,MIT 6.5840 讲分布式故障与 MapReduce。具体实现参考固定为 Spark 3.5.8 官方指南。不把整门研究生课强加为本入门 Lab 的先修,而是选真正相关的单元。

下方核验目录可中英检索并下载为结构化 JSON。每个学习单元指向具体 lecture、论文段落或作业题面,再配一个独立原创可运行练习。先预测,运行后验证不变量,再解释计划与计数器。此映射不提供大学学分,也不公开原课程作业解答。

核验日期:北京时间 2026-11-14。区分已发布材料与暂定课表。CS267 选用有年代标注的 2016 归档,硬件数字不是 2026 容量建议;2025 官方页注明视频需 Berkeley 登录。MIT 春季 2026 的选用 Lecture 1 笔记与 Lab 1 题面已经公开,课表本身仍标为暂定。公开阅读与注册、评分、学费分开,不使用私人课程账号或付费材料。

在项目根目录可以离线检索,不需要浏览器或服务:

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

MIT 协作政策禁止公开作业解答。私下尝试 Go 原作业前请读官方政策。本 Lab 不使用其作业骨架、不实现其作业协调器。第三方材料保留在上游并适用原条款;本仓库只存链接、书目信息与原创学习任务。

下载结构化目录 (JSON)

选用大学课程

University of California, Berkeley · CS267

Applications of Parallel Computers · Spring 2016

published archive · 核验 2026-11-14

先修: 常规语言编程与理解应用算法所需的数学;这是并行计算课程,不是 Spark API 教程。

公开阅读: 课程主页与选用讲义 PDF 无需登录可读;核验范围为选用 PDF,不涵盖所有历史视频。

注册 / 付费: 阅读这些公开资料无需注册或购买;学分、教学支持和历史机器账号另属正式课程,不声称当前可注册或具体收费。

版本与边界: 2016 年归档。硬件及云平台数字有年代性,学习通信、任务粒度和局部性问题。2025 官方页存在,但注明视频需 Berkeley 登录;不冒充全部开放的新课。

2025 访问条件说明

Massachusetts Institute of Technology · 6.5840

Distributed Systems · Spring 2026

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

先修: 官方先修:6.1910(6.004)以及 6.1800(6.033)或 6.1810,或同等基础;需较强编程能力,Lab 1 使用 Go。

公开阅读: Lecture 1 笔记、课表、MapReduce 原论文与 Lab 1 题面可公开访问。核验日这些 2026 资料已经发布;暂定课表不等于未来讲座已发生。

注册 / 付费: 公开页面免费阅读且无需课程登录;MIT 的评分、学分和课程系统另需正式注册,本 Lab 不提供这些服务;未独立核验学费。

版本与边界: 2026 教学资料包含 2004 年 MapReduce 经典论文。本 Lab 的 Spark 任务异常练习弱于 MIT 多进程 Worker 崩溃作业。

官方协作政策

阅读 → 预测 → 可运行练习

01-parallel · 工作量、槽位与粒度

python scripts/run_all.py --only parallel

先预测: 只有两个槽位时,预测 64 个小任务是否胜过 8 个,解释任务数为何不等于核数。

要核对的证据: 各方案均等于独立和 119516556;检查 1/8/64 个 TaskEnd 尝试与全部耗时。

边界: local[2,2] 单 JVM;成本控件与此运行都不能证明多机扩展。

Lab 原创练习,不含原课程作业解答。

02-model · 从 MapReduce 到 DAG 与 Stage

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

先预测: 执行前画 map 侧、交换与 reduce 侧;哪个依赖形成 Stage 边界?

要核对的证据: 在保存的两份 Lineage 中找到 ShuffledRDD,并在每个计时组中找到两个任务阶段;所有键的结果仍正确。

边界: 此 RDD 轨迹解释模型,并未实现 MIT Lab 1 或 RPC 协调器。

Lab 原创练习,不含原课程作业解答。

03-aggregation · 移动前的可合并摘要

python scripts/run_all.py --only aggregation

先预测: 解释局部求和为何可合并;为什么不带数量的局部平均数不能直接平均。

要核对的证据: 核对完整 1,000 键 oracle 与 Shuffle 字节;区分序列化批次与源记录。

边界: 本机 Shuffle 字节是引擎序列化指标,不是跨机网络流量。

Lab 原创练习,不含原课程作业解答。

04-join · 倾斜、复制与长尾

python scripts/run_all.py --only join

先预测: 80% 热键下预测最热输出分区;加盐额外增加了什么工作?

要核对的证据: 各方案均为 240000 行、加权和 384001;比较分区直方图与 Join 计划,保留加盐更慢的观测。

边界: 维表键唯一。旧 Join 计划为执行前策略证据,不是最终 AQE 计划;AQE skew join 仍未实测。

Lab 原创练习,不含原课程作业解答。

05-recovery · 确定性、重试与 Lineage

python scripts/run_all.py --only recovery

先预测: 一次任务异常后哪些结果应保持?移除缓存后什么会改变?

要核对的证据: 分区 0 先失败后成功;求值次数 8/0/8;ReliableCheckpointRDD 截断 Lineage。

边界: 没有杀 Executor 或主机;本地检查点不抵抗整机丢失,弱于 MIT Worker 崩溃测试。

Lab 原创练习,不含原课程作业解答。

06-resources · 内存层次与诊断

python scripts/run_all.py --only resources

先预测: 槽位不变时更多分区是否改变工作集?区分 CPU Cache 与 RDD 持久化存储。

要核对的证据: 验证已消费且局部有序的 payload、行数与 ID 和;检查真实非零 Spill 与逐任务内存指标。

边界: Spill 由 8192 元素阈值强制触发,不是自然 OOM;任务执行内存峰值不是进程 RSS。

Lab 原创练习,不含原课程作业解答。

07-aqe · 观察最终自适应计划

python scripts/run_aqe.py

先预测: 预测仅开启 AQE 为何可能仍有 32 个 reducer,以及 1 字节与 1 MiB 目标是否形成同一最终计划。

要核对的证据: 完整逐键 count/sum oracle;比较执行前/最终计划、AQEShuffleRead SQL 指标与实际 TaskEnd 阶段;按指南运行 1 字节反例。

边界: 只实现 Shuffle 后分区合并;Join 自适应、分布式训练与推理仅为阅读延伸。

Lab 原创练习,不含原课程作业解答。

可核查资料清单

CS267 Lecture 1: Introduction

lecture · 2016 · 公开阅读 / 核验 2026-11-14

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

lecture · 2016 · 公开阅读 / 核验 2026-11-14

CS267 Lecture 3: Parallel Machines and Programming Models

lecture · 2016 · 公开阅读 / 核验 2026-11-14

CS267 Lecture 9: Cloud Computing and Big Data Processing

lecture · 2016 · 公开阅读 / 核验 2026-11-14

CS267 Lecture 23: Dynamic Load Balancing

lecture · 2016 · 公开阅读 / 核验 2026-11-14

来自课程 2016-04-12 的 Lecture 23 链接;部分复用幻灯片保留 2012 日期和旧讲次编号。

6.5840 2026 Lecture 1: Introduction

lecture notes · 2026 · 公开阅读 / 核验 2026-11-14

6.5840 Lab 1: MapReduce

assignment specification · 2026 · 公开阅读 / 核验 2026-11-14

只研读题面,不公开该作业解答;原课程协作政策禁止公开解答。本 Lab 练习不使用其作业骨架,也不实现该协调器。

MapReduce: Simplified Data Processing on Large Clusters

original paper · 2004 · 公开阅读 / 核验 2026-11-14

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

original paper · 2012 · 公开阅读 / 核验 2026-11-14

Apache Spark 3.5.8 RDD Programming Guide

official implementation guide · Spark 3.5.8 · 公开阅读 / 核验 2026-11-14

固定版本的实现参考,不算大学课程。

Apache Spark 3.5.8 SQL Performance Tuning

official implementation guide · Spark 3.5.8 · 公开阅读 / 核验 2026-11-14

阅读 Adaptive Query Execution 与 Coalescing Post Shuffle Partitions;其他 AQE 功能未在本实验验证。

Apache Spark 3.5.8 Tuning Guide

official implementation guide · Spark 3.5.8 · 公开阅读 / 核验 2026-11-14

ZeRO: Memory Optimizations Toward Training Trillion Parameter Models

AI extension / original paper · 2020 · 公开阅读 / 核验 2026-11-14

预印本始于 2019,选用 v3 于 2020 修订。只作延伸阅读,不是已实现训练基准。

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

AI extension / original paper · 2022 · 公开阅读 / 核验 2026-11-14

已发表于 OSDI 2022;学习变长请求的迭代级调度。本 Lab 未运行推理引擎。

AI 阅读桥梁 · 未实现

训练:阅读 ZeRO(2019 预印本,选用 2020 v3)。把状态分片连到每 Worker 内存与集合通信;数据分片与优化器状态分片不同。写清各 rank 拥有什么值、何时需要移动。Spark 聚合只提供推理基础,不是 ZeRO 实现或 GPU 基准。

推理:阅读 Orca(OSDI 2022)的迭代级调度。把请求长度差异连到 Join 倾斜、AQE 中的长尾与任务粒度问题;解释一个请求如何在同批其他请求继续时返回。未测尾延迟、token 吞吐、GPU 集合通信或服务正确性;本 Lab 未运行模型,也不声称完成 LLM 评测。

这些是已发布原论文,不是预测,也不声称覆盖 2026 最新系统。无需付费调用或凭据。