阅读、预测、执行、解释
两门大学课程提供互补基础: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 崩溃作业。
官方协作政策
阅读 → 预测 → 可运行练习
python scripts/run_all.py --only parallel
先预测: 只有两个槽位时,预测 64 个小任务是否胜过 8 个,解释任务数为何不等于核数。
要核对的证据: 各方案均等于独立和 119516556;检查 1/8/64 个 TaskEnd 尝试与全部耗时。
边界: local[2,2] 单 JVM;成本控件与此运行都不能证明多机扩展。
Lab 原创练习,不含原课程作业解答。
python scripts/run_all.py --smoke --only aggregation
先预测: 执行前画 map 侧、交换与 reduce 侧;哪个依赖形成 Stage 边界?
要核对的证据: 在保存的两份 Lineage 中找到 ShuffledRDD,并在每个计时组中找到两个任务阶段;所有键的结果仍正确。
边界: 此 RDD 轨迹解释模型,并未实现 MIT Lab 1 或 RPC 协调器。
Lab 原创练习,不含原课程作业解答。
python scripts/run_all.py --only aggregation
先预测: 解释局部求和为何可合并;为什么不带数量的局部平均数不能直接平均。
要核对的证据: 核对完整 1,000 键 oracle 与 Shuffle 字节;区分序列化批次与源记录。
边界: 本机 Shuffle 字节是引擎序列化指标,不是跨机网络流量。
Lab 原创练习,不含原课程作业解答。
python scripts/run_all.py --only join
先预测: 80% 热键下预测最热输出分区;加盐额外增加了什么工作?
要核对的证据: 各方案均为 240000 行、加权和 384001;比较分区直方图与 Join 计划,保留加盐更慢的观测。
边界: 维表键唯一。旧 Join 计划为执行前策略证据,不是最终 AQE 计划;AQE skew join 仍未实测。
Lab 原创练习,不含原课程作业解答。
python scripts/run_all.py --only recovery
先预测: 一次任务异常后哪些结果应保持?移除缓存后什么会改变?
要核对的证据: 分区 0 先失败后成功;求值次数 8/0/8;ReliableCheckpointRDD 截断 Lineage。
边界: 没有杀 Executor 或主机;本地检查点不抵抗整机丢失,弱于 MIT Worker 崩溃测试。
Lab 原创练习,不含原课程作业解答。
python scripts/run_all.py --only resources
先预测: 槽位不变时更多分区是否改变工作集?区分 CPU Cache 与 RDD 持久化存储。
要核对的证据: 验证已消费且局部有序的 payload、行数与 ID 和;检查真实非零 Spill 与逐任务内存指标。
边界: Spill 由 8192 元素阈值强制触发,不是自然 OOM;任务执行内存峰值不是进程 RSS。
Lab 原创练习,不含原课程作业解答。
python scripts/run_aqe.py
先预测: 预测仅开启 AQE 为何可能仍有 32 个 reducer,以及 1 字节与 1 MiB 目标是否形成同一最终计划。
要核对的证据: 完整逐键 count/sum oracle;比较执行前/最终计划、AQEShuffleRead SQL 指标与实际 TaskEnd 阶段;按指南运行 1 字节反例。
边界: 只实现 Shuffle 后分区合并;Join 自适应、分布式训练与推理仅为阅读延伸。
Lab 原创练习,不含原课程作业解答。
可核查资料清单
lecture · 2016 · 公开阅读 / 核验 2026-11-14
lecture · 2016 · 公开阅读 / 核验 2026-11-14
lecture · 2016 · 公开阅读 / 核验 2026-11-14
lecture · 2016 · 公开阅读 / 核验 2026-11-14
lecture · 2016 · 公开阅读 / 核验 2026-11-14
来自课程 2016-04-12 的 Lecture 23 链接;部分复用幻灯片保留 2012 日期和旧讲次编号。
lecture notes · 2026 · 公开阅读 / 核验 2026-11-14
assignment specification · 2026 · 公开阅读 / 核验 2026-11-14
只研读题面,不公开该作业解答;原课程协作政策禁止公开解答。本 Lab 练习不使用其作业骨架,也不实现该协调器。
original paper · 2004 · 公开阅读 / 核验 2026-11-14
original paper · 2012 · 公开阅读 / 核验 2026-11-14
official implementation guide · Spark 3.5.8 · 公开阅读 / 核验 2026-11-14
固定版本的实现参考,不算大学课程。
official implementation guide · Spark 3.5.8 · 公开阅读 / 核验 2026-11-14
阅读 Adaptive Query Execution 与 Coalescing Post Shuffle Partitions;其他 AQE 功能未在本实验验证。
official implementation guide · Spark 3.5.8 · 公开阅读 / 核验 2026-11-14
AI extension / original paper · 2020 · 公开阅读 / 核验 2026-11-14
预印本始于 2019,选用 v3 于 2020 修订。只作延伸阅读,不是已实现训练基准。
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 最新系统。无需付费调用或凭据。