Apache Spark 的 Shuffle 实现机制经历了多次演进。从宏观的历史演变来看,主要分为 Hash Shuffle (已废弃) 和 Sort Shuffle (当前主流) 两大类。 但在目前的 Spark 版本(2.0 及以后)中,实际上只有 Sort Shuffle 这一种架构,但它内部根据不同的条件,会智能选择三种不同的写入策略(Writer Modes)。 以下是详细的分类和原理解析: --- 一、 历史演变分类 1. Hash Shuffle (已废弃) 这是 Spark 早期(1.2版本之前)的默认机制。 普通机制 (V1): 每个 Map Task 会为每个 Reduce Task 生成一个单独的文件。 问题: 产生的文件数量是 $M \times R$ (Map任务数 $\times$ Reduce任务数)。如果 Mapper 和 Reducer 各有 1000 个,就会产生 100 万个文件,导致文件描述符(FD)耗尽和大量的随机磁盘 I/O。 合并机制 (Consolidate Files, V2): 优化了上述问题,让同一个 Executor 中的...