Spark性能调优

一.缓存

对于某些工作负载,可以通过在内存中缓存数据或打开某些实验选项来提高性能。
Spark SQL可以通过调用spark.catalog.cacheTable(“tableName”)或使用内存列式格式缓存表dataFrame.cache()。然后,Spark SQL将仅扫描所需的列,并将自动调整压缩以最大程度地减少内存使用和GC压力。可以调用spark.catalog.uncacheTable(“tableName”)从内存中删除表。

可以在SparkSession上使用setConf设置或SET key=value使用SQL 运行 命令来完成内存中缓存的配置。

  • spark.sql.inMemoryColumnarStorage.compressed
    默认值:true
    含义:设置为true时,Spark SQL将根据数据统计信息自动为每一列选择一个压缩编解码器。

  • spark.sql.inMemoryColumnarStorage.batchSize
    默认值:10000
    含义:控制用于列式缓存的批处理的大小。较大的批处理大小可以提高内存利用率和压缩率,但是在缓存数据时更容易出现OOM。

二.其他配置选项

以下选项也可以用于调整查询执行的性能。随着自动执行更多优化,这些选项可能会在将来的版本中被弃用。
在这里插入图片描述

三.Spark动态广播

当两个表进行链接时,广播提示spark表与另一个表或视图要广播的每个指定的表。当Spark确定连接方法时,即使统计数据高于配置,也首选广播哈希连接(即BHJ)spark.sql.autoBroadcastJoinThreshold。当指定了连接的两端时,Spark广播统计信息较少的一方。注意Spark不能保证始终选择BHJ,因为并非所有情况(例如完全外部联接)都支持BHJ。当选择广播嵌套循环联接时,我们仍然遵守提示。

import org.apache.spark.sql.functions.broadcast
broadcast(spark.table("src")).join(spark.table("records"), "key").show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值