一些常用的Spark SQL调优技巧

 

 

 

一些常用的Spark SQL调优技巧
  1. 使用缓存表
    在sparksql中,当我们创建表时,我们可以通过调用spark.catalog.cacheTable("tableName") 或者 dataFrame.cache()的方式将表缓存起来。这样Spark SQL将仅扫描所需的列,并自动调整压缩以最小化内存使用和GC压力。
    当你不需要缓存时,可以通过使用spark.catalog.uncacheTable("tableName")将其移除缓存。

    此外,我们还可以通过设置spark.sql.inMemoryColumnarStorage.batchSize来调整列缓存batch的大,例如在提交spark作业时候,指定以下参数:

     --conf "spark.sql.inMemoryColumnarStorage.batchSize=10000"
    

    较大的batch size可以提高内存利用率和压缩率,但在缓存数据时存在OOM风险。

  2. 调整Shuffle分区
    我可以通过调整在对数据进行shuffle或者aggregation操作时的分区数目来提高性能。
    分区数和reduce任务数是相同的。如果reducer具有资源密集型操作,那么增加shuffle分区将增加并行性,同时还可以更好地利用资源并最小化每个任务的负载。
    我们可以通过设置spark.sql.shuffle.partitions来调整spark sql作业中的shuffle分区数(默认值为200).
    例如在提交spark作业时候,指定以下参数:

     --conf "spark.sql.shuffle.partitions=2000"
    
  3. 使用Broadcast Join
    Broadcast Join接类似于Hive中的Map Join,其中较小的表将被加载到分布式缓存中,并且连接操作可以作为Map Only操作来完成。 默认情况下,Spark SQL中会启用广播连接。当然,我们也可以指定以下参数将其关闭:

     --conf“spark.sql.autoBroadcastJoinThreshold = -1”
    

    这个参数是表示Broadcast Join时广播表大小的阈值,-1即可以理解为关闭Broadcast Join。
    当然当我们开启Broadcast Join时,也可以修改其数值来增加在执行连接操作时可以广播的表大小的最大值。 默认值为10 MB,例如我们可以通过以下设置将其大小更改为50MB:

     --conf "spark.sql.autoBroadcastJoinThreshold = 50485760"
    

参考资料:
Spark-Troubleshooting-guide-Spark-SQL-Examples-of-commonly-used-Spark-SQLTuning-properties

 

转载于:https://www.cnblogs.com/lestatzhang/p/10611322.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值