Spark 3.0新特性介绍
1. 自适应查询优化
这是 Databricks 和Intel 中国团队在做的项目(https://tinyurl.com/y3rjwcos),基于已完成的执行计划节点的统计数据,优化剩余的查询执行计划,它的特点是:
- 减少 Reducer 的数量
- 将 Sort Merge Join 转换为 Broadcast Hash Join
- 处理数据倾斜
2. 动态分区修剪
静态分区裁剪优化
动态分区裁剪优化
- spark.sql.optimizer.dynamicPartitionPruning.enabled 参数必须设置为 true,不过这个值默认就是启用的;
- 需要裁减的表必须是分区表,而且分区字段必须在 join 的 on 条件里面;
- Join 类型必须是 INNER, LEFT SEMI (左表是分区表), LEFT OUTER (右表是分区表), or RIGHT OUTER (左表是分区表)。
- 满足上面的条件也不一定会触发动态分区裁减,还必须满足 spark.sql.optimizer.dynamicPartitionPruning.useStats 和 spark.sql.optimizer.dynamicPartitionPruning.fallbackFilterRatio 两个参数综合评估出一个进行动态分区裁减是否有益的值,满足了才会进行动态分区裁减。
3. Spark on Kubernetes
Spark 3.0 在 Kubernetes 上有更多的功能:
- 支持使用 pod 模板来定制化 driver 和 executor 对应的 pods
- 支持动态资源申请,资源空闲的时候,减少 executor 数量,资源紧张的时候,动态的加入一些 executor
- 支持外置的 shuffle 服务,将 shuffle 服务放在独立的 pod 里,能够解耦成一个架构