Spark新特性+核心知识点回顾
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark新特性+核心知识点回顾相关的知识,希望对你有一定的参考价值。
Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!
往期内容:
- Spark基础入门-第一章:Spark 框架概述
- Spark基础入门-第二章:Spark环境搭建-Local
- Spark基础入门-第三章:Spark环境搭建-StandAlone
- Spark基础入门-第四章:Spark环境搭建-StandAlone-HA
- Spark基础入门-第五章:环境搭建-Spark on YARN
- Spark基础入门-第六章:PySpark库
- Spark基础入门-第七章:本机开发环境搭建
- Spark基础入门-第八章:分布式代码执行分析
- Spark Core-第一章: RDD详解
- Spark Core-第三章:RDD的持久化
- Spark Core-第四章:Spark案例练习
- Spark Core-第五章:共享变量
- Spark Core-第六章:Spark 内核调度
- SparkSQL-第一章:SparkSQL快速入门
- SparkSQL-第二章:SparkSQL 概述
- SparkSQL-第三章:DataFrame入门
- SparkSQL-第四章:SparkSQL函数定义
- SparkSQL-第五章:SparkSQL的运行流程
- SparkSQL-第六章:Spark On Hive
- SparkSQL-第七章:分布式SQL执行引擎
一、掌握Spark的Shuffle流程
1.1 Spark Shuffle
Map 和 Reduce
在Shuffle过程中. 提供数据的称之为Map端(Shuffle Write) 接收数据的 称之为 Reduce端(Shuffle Read)
在Spark的两个阶段中, 总是前一个阶段产生 一批Map提供数据, 下一阶段产生一批Reduce接收数据
1.2 HashShuffleManager
Spark 提供2种Shuffle管理器:
- HashShuffleManager
- SortShuffleManager
未经优化的HashShuffleManager
优化后HashShuffleManager
基本和未优化的一致,不同点在于
1. 在一个Executor内, 不同Task是共享Buffer缓冲区
2. 这样减少了缓冲区乃至写入磁盘文件的数量, 提高性能
1.3 SortShuffleManager
SortShuffleManager的运行机制主要分成两种,一种是普通运行机制, 另一种是bypass运行机制。
普通机制的SortShuffleManager
bypass运行机制的触发条件如下:
1)shuffle map task数量小于 spark.shuffle.sort.bypassMergeThre shold=200参数的值。 2)不是聚合类的shuffle算子(比如reduceByKey)。
同普通机制基本类同, 区别在于, 写入磁盘临时文件的时候不会在内 存中进行排序而是直接写, 最终合并为一个task一个最终文件所以和普通模式IDE区别在于:
第一, 磁盘写机制不同;
第二, 不会进行排序。也就是说,启用该机制的最大好处在于, shuffle write过程中, 不需要进行数据的排序操作,也就节省掉了 这部分的性能开销
ByPass机制的SortShuffleManager
二、Spark 3.0 新特性
2.1 3.0新特性概览
3.0新特性更新的模块占比
3.0新特性概览
对比2.4版本, 3.0在TPC-DS基准测试中
性能超过2.4版本, 达到了2倍的提升
30TB基准数据量计算测试
2.2 Adaptive Query Execution 自适应查询(SparkSQL)
由于缺乏或者不准确的数据统计信息(元数据)和对成本的错误估算(执行计划调度)导致生成的初始执行计划不理想 在Spark3.x版本提供Adaptive Query Execution自适应查询技术
通过在”运行时”对查询执行计划进行优化, 允许Planner在运行时执行可选计划,这些可选计划将会基于运行时数据统 计进行动态优化, 从而提高性能.
Adaptive Query Execution AQE主要提供了三个自适应优化:
- 动态合并 Shuffle Partitions
- 动态调整Join策略
- 动态优化倾斜Join(Skew Joins)
2.2 Adaptive Query Execution 自适应查询(SparkSQL)
- 动态合并 Dynamically coalescing shuffle partitions
可以动态调整shuffle分区的数量。用户可以在开始时设置相对较多的shuffle分区数, AQE会在运行时将相邻的小分区 合并为较大的分区。
- 动态调整Join策略 Dynamically switching join strategies
此优化可以在一定程度上避免由于缺少统计信息或着错误估计大小(当然也可能两种情况同时存在) ,而导致执行计划性能不佳的情况。这种自适应优化可以在运行时sort merge join转换成broadcast hash join,从而进一步提升性能。
- 动态优化倾斜Join
skew joins可能导致负载的极端不平衡, 并严重降低性能。在AQE从shuffle文件统计信息中检测到任何倾斜后,它可 以将倾斜的分区分割成更小的分区,并将它们与另一侧的相应分区连接起来。这种优化可以并行化倾斜处理,获得更好的整体性能。
触发条件:
1. 分区大小 > spark.sql.adaptive.skewJoin.skewedPartitionFactor (default=10) * "median partition size(中位数分区大小)"
2. 分区大小 > spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes (default = 256MB)
AQE 总结:
1. AQE的开启通过: spark.sql.adaptive.enabled 设置为true开启
2. AQE是自动化优化机制, 无需我们设置复杂的参数调整, 开启AQE符合条件即可自动化应用AQE优化
3. AQE带来了极大的SparkSQL性能提升
2.3 Dynamic Partition Pruning 动态分区裁剪(SparkSQL)
当优化器在编译时无法识别可跳过的分区时, 可以使用"动态分区裁剪",即基于运行时推断的信息来进一步进行分区 裁剪。这在星型模型中很常见, 星型模型是由一个或多个并且引用了任意数量的维度表的事实表组成。在这种连接操 作中,我们可以通过识别维度表过滤之后的分区来裁剪从事实表中读取的分区。在一个TPC-DS基准测试中, 102个查询中有60个查询获得2到18倍的速度提升。
2.4 增强的Python API: PySpark和Koalas
Python现在是Spark中使用较为广泛的编程语言,因此也是Spark 3.0的重点关注领域。 Databricks有68%的 notebook命令是用Python写的。 PySpark在 Python Package Index上的月下载量超过 500 万。
很多Python开发人员在数据结构和数据分析方面使用pandasAPI,但仅限于单节点处理。 Databricks会持续开发Koalas——基于Apache Spark的pandas API实现,让数据科学家能够在分布式环境中更高效地处理大数据。
经过一年多的开发, Koalas实现对pandas API将近80%的覆盖率。 Koalas每月PyPI下载量已迅速增长到85万,并以每两周一次的发布节奏快速演进。虽然Koalas可能是从单节点pandas代码迁移的最简单方法,但很多人仍在使用PySpark API,也意味着PySpark API也越来越受欢迎。
2.5 Koalas入门演示 - Koalas DataFrame构建
Koalas入门演示 - KoalasDataFrame 查看数据
Koalas DataFrame 缺失值处理
Koalas DataFrame 分组计算
Koalas DataFrame 数据导入导出
三、概念回顾总结
以上是关于Spark新特性+核心知识点回顾的主要内容,如果未能解决你的问题,请参考以下文章
第284天学习打卡(知识点回顾 springboot Junit5 参数化测试特性)