Spark 新特性+核心
本文来自 B站 黑马程序员 - Spark教程 :原地址
1. 掌握Spark的Shuffle流程
1.1 Spark Shuffle
Map和Reduce
在Shuffle过程中,提供数据的称之为Map端(Shuffle Write)接收数据的称之为Reduce端(Shuffle Read)
在Spark的两个阶段中,总是前一个阶段产生 批Map提供数据,下一个阶产生一批Reduce接收数据
1.2 Hash Shuffle Manager
Spark 提供2种Shuffle管理器:
- HashShuffleManager
- SortShuffleManager
优化后的HashShuffleManager基本和未优化的一致,不同点在于
- 在一个Executor内,不同Task是共享Buffer缓冲区
- 这样减少了缓冲区乃至写入磁盘文件的数量,提高性能
1.3 Sort Shuffle Manager
SortShuffleManager的运行机制主要分成两种,一种是普通运行机制,另一种是bypass运行机制。
总结
- SortShuffle对比HashShuffle可以减少很多的磁盘文件,以节省网络IO的开销
- SortShuffle主要是对磁盘文件进行合并来进行文件数量的减少,同时两类Shuffle都需要经过内存缓冲区溢写磁盘的场景,所以可以得知,尽管Spark是内存迭代计算框架,但是内存迭代主要在窄依赖中,在宽依赖(Shuffle)中磁盘交互还是一个无可避免的情况。所以,我们要尽量减少Shuffle的出现,不要进行无意义的Shuffle计算
2. 掌握Spark3.0新特性
- AQE的开启通过:Spark.sql.adaptive.enabled设置为true开启,触发后极大提升SparkSQL计算性能
- 动态分区裁剪可以让我们更好的优化运行时分区内数据的量级。通过动态的谓词下推来获取传统静态谓词下推无法获得的更高过滤属性,减少操作的分区数据量以提高性能
- 新版Koalas类库可以让我们写Pandas API(Koalas提供)然后将它们运行在分布式的Spark环境上,Pandas开发者也能快速上手Spark
将它们运行在分布式的Spark环境上,Pandas开发者也能快速上手Spark