缓存数据
我们都知道一些计算中间的数据集可以进行缓存,缓存到内存中明显要比磁盘中速度要快,Spark SQL可以通过调用spark.catalog.cacheTable(“tableName”)或者df.cache()来使用内存缓存表,然后spark会只扫描需要的列并自动压缩来减少内存和GC使用,可以调用spark.catalog.uncacheTable(“tableName”)从内存中删除该表。
1.1 缓存中的配置如下:
spark.sql.inMemoryColumnarStorage.compressedd(默认值为true),设置为true时spark sql会默认的为数据选择压缩方式。
Spark.sql.inMemoryColumnarStorage.batchSize(默认值为10000),意思是可以为列缓存设置最大批大小,设置的大可以提高内存利用率和压缩,但是也有可能导致内存溢出。
1.2 缓存中的配置可以通过创建sparkSession时候进行配置,使用方法如下:
SQL查询配置选项
数据倾斜
SQL查询任务时数据倾斜会严重影响查询速度,数据倾斜就是某个分区数据严重大于其他分区数据,整个任务执行速度是以执行最慢的分区决定,从一开始我们就应该避免数据倾斜的情况产生,如果真的产生了,可以通过将发生数据倾斜的任务拆分成多个任务。
前提是先进行如下配置:
这样spark会动态的将倾斜任务进行拆分。
如果一个分区数据大于spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes(默认为256M)且大于spark.sql.adaptive.skewJoin.skewedPartitionFactor(因子默认是5)×中位值分区大小,那么就认为该分区产生了数据倾斜。
总 结
在实际使用中,如果遇到需要多次使用的数据集,为了提高效率,我们可以将这些中间数据集缓存到内存中。
如果数据量比较大的时候我们可以根据实际情况进行相应的一些优化项的设置,数据倾斜非常影响数据的查询速度,最好的办法就是避免数据倾斜的产生,这就需要我们指定合理的分区策略,如果真产生了数据倾斜我们可以通过上面的方法进行适当的优化。
end
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129644.html
摘要:过程中,各个节点上的相同都会先写入本地磁盘文件中,然后其他节点需要通过网络传输拉取各个节点上的磁盘文件中的相同。因此在过程中,可能会发生大量的磁盘文件读写的操作,以及数据的网络传输操作。Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)——数据倾斜调优 Spark面试题(...
阅读 1347·2023-01-11 13:20
阅读 1685·2023-01-11 13:20
阅读 1133·2023-01-11 13:20
阅读 1860·2023-01-11 13:20
阅读 4101·2023-01-11 13:20
阅读 2705·2023-01-11 13:20
阅读 1386·2023-01-11 13:20
阅读 3598·2023-01-11 13:20