SparkSQL性能调优官网权威资料点击这里也可看全文
对于某些工作负载,可以通过将数据缓存在内存中或打开一些实验选项来提高性能。
在内存中缓存数据
Spark SQL可以使用内存中的列式格式缓存表格,通过调用spark.catalog.cacheTable("tableName")
或dataFrame.cache()
方法。然后,Spark SQL将只扫描所需的列,并自动调整压缩以最小化内存使用和GC压力。可以调用spark.catalog.uncacheTable("tableName")
或dataFrame.unpersist()
方法将表格从内存中移除。
可以使用SparkSession的setConf
方法或使用SQL运行SET key=value
命令来配置内存中缓存的方式。
以下是可以进行内存中缓存的配置选项:
属性名称 | 默认值 | 含义 | 版本 |
---|---|---|---|
spark.sql.inMemoryColumnarStorage.compressed | true | 当设置为true时,Spark SQL将根据数据的统计信息自动为每列选择压缩编解码器。 | 1.0.1 |
spark.sql.inMemoryColumnarStorage.batchSize | 10000 | 控制列式缓存的批处理大小。较大的批处理大小可以提高内存利用率和压缩效果,但在缓存数据时可能会导致OOM。 | 1.1.1 |
其他配置选项
以下选项也可用于调优查询执行的性能。随着自动进行更多优化,这些选项可能在未来版本中被弃用。
属性名称 | 默认值 | 含义 | 版本 |
---|---|---|---|
spark.sql.files.maxPartitionBytes | 134217728 (128 MB) | 读取文件时将打包到单个分区中的最大字节数。此配置仅在使用基于文件的数据源(如Parquet、JSON和ORC)时有效。 | 2.0.0 |
spark.sql.files.openCostInBytes | 4194304 (4 MB) | 打开一个文件的估计成本,以可以在同一时间内扫描的字节数来衡量。这在将多个文件放入一个分区时使用。建议过度估计,这样小文件所在的分区将比较大的文件所在的分区更快(优先调度)。此配置仅在使用基于文件的数据源(如Parquet、JSON和ORC)时有效。 | 2.0.0 |
spark.sql.files.minPartitionNum | 默认并行度 | 建议的(不保证)最小拆分文件分区数。如果未设置,默认值为spark.sql.leafNodeDefaultParallelism 。此配置仅在使用基于文件的数据源(如Parquet、JSON和ORC)时有效。 |
3.1.0 |
spark.sql.files.maxPartitionNum | None | 建议的(不保证)最大拆分文件分区数。如果设置了此值,当初始分区数超过此值时,Spark将重新调整每个分区的大小,使初始分区数接近此值。此配置仅在使用基于文件的数据源(如Parquet、JSON和ORC)时有效。 | 3.5.0 |
spark.sql.broadcastTimeout | 300 | 广播连接中广播等待时间的超时时间(以秒为单位)。 | 1.3.0 |
spark.sql.autoBroadcastJoinThreshold | 10485760 (10 MB) | 在执行连接操作时,配置表格的最大大小(字节数),当其小于此值时,将广播到所有的工作节点上。通过将此值设置为-1,可以禁用广播。注意,目前仅支持对运行了ANALYZE TABLE <tableName> COMPUTE STATISTICS noscan 命令的Hive Metastore表进行统计。 |
1.1.0 |
spark.sql.shuffle.partitions | 200 | 配置用于连接或聚合操作时要使用的分区数。 | 1.1.0 |
spark.sql.sources.parallelPartitionDiscovery.threshold | 32 | 配置启用并行列出作业输入路径的阈值。如果输入路径的数量大于此阈值,则Spark将使用Spark分布式作业列出文件。否则,将回退到顺序列出。此配置仅在使用基于文件的数据源(如Parquet、ORC和JSON)时有效。 | 1.5.0 |
spark.sql.sources.parallelPartitionDiscovery.parallelism | 10000 | 配置作业输入路径的最大并行列出数。如果输入路径的数量大于此值,则将其限制为此值。此配置仅在使用基于文件的数据源(如Parquet、ORC和JSON)时有效。 | 2.1.1 |
SQL查询的连接策略Hints提示
连接策略提示,即BROADCAST、MERGE、SHUFFLE_HASH和SHUFFLE_REPLICATE_NL,指示Spark在连接两个关系时使用指定的策略。例如,当在表格‘t1’上使用BROADCAST提示时,Spark优先选择广播连接(根据是否存在任何等值连接键,可能是广播哈希连接或广播嵌套循环连接),即使统计数据建议表格‘t1’的大小超过了配置spark.sql.autoBroadcastJoinThreshold
。
当在连接的两侧分别指定不同的连接策略提示时,Spark优先选择BROADCAST提示,然后是MERGE提示,然后是SHUFFLE_HASH提示,最后是SHUFFLE_REPLICATE_NL提示。当两侧都指定了BROADCAST提示或SHUFFLE_HASH提示时,Spark将根据连接类型和关系的大小选择构建一侧。文章来源:https://www.toymoban.com/news/detail-807760.html
请注意,并不能保证Spark将选择提示中指定的连接策略,因为特定的策略可能不支持所有连接类型。文章来源地址https://www.toymoban.com/news/detail-807760.html
spark.table("src").join(spark
到了这里,关于【spark床头书系列】SparkSQL性能调优官网权威资料的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!