spark sql 性能优化

一 设置shuffle的并行度

我们可以通过属性spark.sql.shuffle.partitions设置shuffle并行度

 

二 Hive数据仓库建设的时候,合理设置数据类型,比如你设置成INT的就不要设置成BIGINT,减少数据类型不必要的内存开销

 

三 SQL优化

 

四 并行的处理查询结果

对于Spark SQL查询的结果,如果数据量比较大,比如超过1000条,那么就不要使用collect到driver再处理,使用foreach算子并行处理查询结果

 

五 缓存表

对于一条SQL语句中可能多次使用到的表,可以对其进行缓存,使用SQLContext.cacheTable(tableName)或者DataFrame.cache即可。Spark SQL会用内存 列存储的格式进行表的缓存。然后SparkSQL就可以仅仅扫描需要使用的列,并且自动优化压缩,来最小化内存使用和GC开销。可以通过spark.sql.inMemoryColumnarStorage.batchSize这个参数,默认10000,配置列存储单位

 

六 广播JOIN表

spark.sql.autoBroadcastJoinThreshold,默认10485760(10M),在内存够用的情况下,提高其大小,可以将join中的较小的表广播出去,而不用进行网络数据传输

Spark SQL性能优化是提高Spark SQL查询速度和效率的关键。下面是一些建议和技巧: 1. 数据分区和分桶:通过合理的数据分区和分桶,可以减少数据倾斜和提高查询性能。使用合适的列进行分区和分桶,可以使查询只针对特定的数据子集进行操作。 2. 数据压缩:使用适当的数据压缩方式可以减少数据存储和传输的成本,并提高查询性能。Spark SQL支持多种压缩格式,如Snappy、Gzip等。 3. 合理设置资源:根据集群规模和任务需求,合理设置Spark SQL的资源配置。包括executor内存、executor核数、并行度等参数的调整,可以根据具体情况进行优化。 4. 数据倾斜处理:数据倾斜是指某些数据分区的大小远远超过其他分区,导致任务执行时间变长。可以采用一些技术手段来解决数据倾斜问题,如使用随机前缀、增加分区、使用广播变量等。 5. 使用合适的数据格式:选择适合查询需求的数据格式可以提高查询性能。例如,Parquet格式支持谓词下推和列式存储,可以减少IO和提高查询速度。 6. 缓存和持久化:对于经常被重复查询的数据,可以使用Spark的缓存和持久化机制,将数据存储在内存或磁盘上,避免多次计算和IO操作。 7. SQL优化:优化SQL查询语句,包括选择合适的连接方式、使用合适的索引、避免不必要的数据转换和计算等。 8. 资源监控和调优:通过Spark监控工具,如Spark UI、Ganglia等,可以实时监控任务的资源使用情况,及时发现和解决性能瓶颈。 综上所述,通过合理的数据分区和分桶、数据压缩、资源配置、数据倾斜处理、数据格式选择、缓存和持久化、SQL优化以及资源监控和调优等手段,可以有效提高Spark SQL的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值