大数据计算阶段
Stage 是什么?
遇到 shuffle 就被切开,一个 Stage 内部可以流水线执行
类比:接力赛的分段,交棒(shuffle)处必须等所有人都到齐
Stage 的边界
宽依赖是分界线:shuffle 之前的数据必须先全部写完,shuffle 之后的 Task 才能开始拉取。所以一个 Stage 内的 Task 可以并行流水,跨 Stage 必须等上一段全部完成。
Task 数量怎么来的
Stage 的 Task 数 = 输入 RDD 的分区数。读 HDFS 时按 block 切(128MB 一个分区),shuffle 后按 `spark.sql.shuffle.partitions`(默认 200)切。分区数太少会倾斜,太多会调度开销大。
看懂 Spark UI
Spark UI 里每个 Stage 一条横条,长度是耗时。如果某个 Stage 明显长于其他,先看它的 Task 耗时分布:均匀地慢是数据量大,少数几个特别慢就是数据倾斜。