Spark SQL --- 性能调优(三)

3. 性能调优

对于有一定计算量的Spark作业来说,可能的性能改进的方式,不是把数据缓存在内存里,就是调整一些开销较大的选项参数。

3.1 在内存中缓存数据

Spark SQL可以通过调用SQLContext.cacheTable(“tableName”)或者DataFrame.cache()把tables以列存储格式缓存到内存中。随后,Spark SQL将会扫描必要的列,并自动调整压缩比例,以减少内存占用和GC压力。你也可以用SQLContext.uncacheTable(“tableName”)来删除内存中的table。

你还可以使用SQLContext.setConf 或在SQL语句中运行SET key=value命令,来配置内存中的缓存。

属性名默认值含义
spark.sql.inMemoryColumnarStorage.compressedtrue如果设置为true,Spark SQL将会根据数据统计信息,自动为每一列选择单独的压缩编码方式。
spark.sql.inMemoryColumnarStorage.batchSize10000控制列式缓存批量的大小。增大批量大小可以提高内存利用率和压缩率,但同时也会带来OOM(Out Of Memory)的风险

3.2 其他配置选项

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

物业名称默认含义
spark.sql.files.maxPartitionBytes134217728(128 MB)读取文件时打包到单个分区中的最大字节数。
spark.sql.files.openCostInBytes4194304(4 MB)可以同时扫描打开文件的估计成本(以字节数衡量)。将多个文件放入分区时使用。最好高估一下,然后,具有较小文件的分区将比具有较大文件的分区(首先安排)更快。
spark.sql.broadcastTimeout300广播加入中广播等待时间的秒数超时
spark.sql.autoBroadcastJoinThreshold10485760(10 MB)配置表的最大大小(以字节为单位),该表在执行联接时将广播到所有工作程序节点。通过将此值设置为-1,可以禁用广播。请注意,当前仅ANALYZE TABLE COMPUTE STATISTICS noscan运行命令的Hive Metastore表支持统计信息 。
spark.sql.shuffle.partitions200配置在对联接或聚合进行数据混排时要使用的分区数。

3.3 SQL查询的广播提示

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

参考

https://spark.apache.org/docs/latest/sql-programming-guide.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值