在 Apache Spark 应用中,调整并行度可以从哪些方面着手,并如何影响整体性能表现?
考察说明
考查对 Spark 并行度概念、设置方法及其对性能影响机制的理解。
回答思路
- 【回答框架 1】并行度在 Spark 中指作业执行时任务(task)的数量,核心由分区数决定,分区数越多,每个分区处理的数据量越小,有助于充分利用集群资源。
- 【回答框架 2】可通过设置 spark.default.parallelism(默认值因部署模式和 Shuffle 类型而异,如本地模式常见为核数,集群模式为所有执行器核数之和或 2 倍)来调整基础并行度,也可针对 RDD 操作(如 coalesce、repartition)或 DataFrame 的 repartition、coalesce 调整具体阶段的分区数。
- 【回答框架 3】并行度提升能更好地利用多核 CPU 和集群节点,减少数据倾斜风险,但过高并行度可能导致任务调度开销增大、资源竞争加剧,甚至降低整体吞吐;过低并行度则会造成资源闲置,负载不均。
- 【回答框架 4】关键是结合数据量、集群资源(CPU、内存)和延迟目标确定合适的并行度,一个合理基准是目标分区数约为总核数的 2-3 倍,但最终须基于实际压测和监控调整,因为数据和计算特性不同。
- 【回答框架 5】调整并行度会影响 Shuffle 过程的效率和输出文件数量,在写数据时需考虑分区数过多导致的小文件问题,应权衡并行度和 I/O 开销。
- 【关键点 1】并行度主要由 Spark 作业中 RDD/DataFrame 的分区数决定。
- 【关键点 2】设置 spark.default.parallelism 和根据阶段调用 repartition/coalesce 可显著调整并行度。
- 【关键点 3】并行度并非越高越好,需结合资源上限与任务调度开销进行平衡。
- 【易错点 1】认为并行度设置越大性能必然线性提升,忽略调度和资源竞争的开销。
- 【易错点 2】在 Shuffle 操作后未重新设置合适分区数,导致数据倾斜或小文件过多。