最近整理了一下spark SQL内置配。加粗配置项是对sparkSQL 调优性能影响比较大的项,小伙伴们按需酌情配置。后续会挑出一些通用调优配置,共大家参考。有不正确的地方,欢迎大家在留言区留言讨论。
配置项 | 默认值 | 概述 |
spark.sql.optimizer.maxIterations | 100 | sql优化器最大迭代次数 |
spark.sql.optimizer.inSetConversionThreshold | 10 | 插入转换的集合大小阈值 |
spark.sql.inMemoryColumnarStorage.compressed | TRUE | 当设置为true时,SCAPK SQL将根据数据的统计自动为每个列选择压缩编解码器 |
spark.sql.inMemoryColumnarStorage.batchSize | 10000 | 控制用于列缓存的批处理的大小。较大的批处理大小可以提高内存利用率和压缩率,但缓存数据时会出现OOM风险 |
spark.sql.inMemoryColumnarStorage.partitionPruning | TRUE | 启用内存中的列表分区剪枝 |
spark.sql.join.preferSortMergeJoin | TRUE | When true, 使用sort merge join 代替 shuffle hash join |
spark.sql.sort.enableRadixSort | TRUE | 使用基数排序,基数排序性能非常快,但是会额外使用over heap.当排序比较小的Row时,overheap 需要提高50% |
spark.sql.autoBroadcastJoinThreshold | 10L * 1024 * 1024 | 当执行join时,被广播到worker节点上表最大字节。当被设置为-1,则禁用广播。当前仅仅支持 Hive Metastore tables,表大小的统计直接基于hive表的源文件大小 |
spark.sql.limit.scaleUpFactor | 4 | 在执行查询时,两次尝试之间读取partation数目的增量。较高的值会导致读取过多分区,较少的值会导致执行时间过长,因为浙江运行更多的作业 |
spark.sql.statistics.fallBackToHdfs | FALSE | 当不能从table metadata中获取表的统计信息,返回到hdfs。这否有用取决与表是否足够小到能够使用auto broadcast joins |
spark.sql.defaultSizeInBytes | Long.MaxValue | 在查询计划中表默认大小,默认被设置成Long.MaxValue 大于spark.sql.autoBroadcastJoinThreshold的值,也就意味着默认情况下不会广播一个表,除非他足够小 |
spark.sql.shuffle.partitions | 200 | 当为join/aggregation shuffle数据时,默认partition的数量 |
spark.sql.adaptive.shuffle.targetPostShuffleInputSize | 64 * 1024 * 1024byte | The target post-shuffle input size in bytes of a task. |
spark.sql.adaptive.enabled | FALSE | 是否开启adaptive query execution(自适应查询执行) |
spark.sql.adaptive.minNumPostShufflePartitions | -1 | 测试用 |
spark.sql.subexpressionElimination.enabled | TRUE | When true, common subexpressions will be eliminated 当为真时,将删除公共子表达式 |
spark.sql.caseSensitive | FALSE | 查询分析器是否区分大小写,默认情况下不区分。强烈建议不区分大小写 |
spark.sql.constraintPropagation.enabled | 是否开启优化,在查询优化器期间推断和传播查询计划中的数据约束。对于某种类型的查询计划(例如有大量谓语和别名的查询),约束传播是昂贵的,会对整个运行时间产生负面影响。 | |
spark.sql.parser.escapedStringLiterals | FALSE | 2.0之前默认值为true,知否默认是否。正常文字能否包含在正则表达式中。 |
spark.sql.parquet.mergeSchema | FALSE | 若为true,在读取parquet数据源时,schema从所有文件中合并出来。否则如果没有可用的摘要文件,则从概要文件或随机文件中选择模式 |
spark.sql.parquet.respectSummaryFiles | FALSE | 若为ture,假设par |