Spark SQL参数调优汇总|提速100%的秘籍

3,033 阅读2分钟

源自个人博客:kelvin-qzy.top/ 欢迎访问

背景

  • 基于TPCDS的100G,500G数据进行了99SQL综合调优测试
  • 测试机为物理机5台,1台为管理节点,4台为计算节点
  • 可用内存约1T,核心数(vCore)200大概

基于实践,在较大数据量下至少提速了一倍。TPCDS是一个复杂的任务集合,涵盖了统计分析,数据挖掘,迭代计算等各种类型的99个SQL任务,本文是针对总体的综合调优。

重要参数

一般不用调driver的参数,部分参数是核心缩写,使用时注意全称。

执行器个数

--num-executors

推荐物理机数的2~6倍,太大呢会增加通信和Shuffle等成本

内存分配

spark.executor.memory

也不是越大越好,大概是数据量2倍,如果是内存不足,多多益善

虚拟核心数

spark.executor.cores

推荐2的整数倍,本例单个Executor给10核

默认分区数

shuffle.partitionsspark.default.parallelism

这个对不同SQL影响各异,一般取线程数的2~3倍最好

SQL自动分区

auto.repartition=true

开启就行

开启堆外内存

spark.memory.offHeap.enabled & spark.memory.offHeap.size=30g

开,同时要指定大小,酌情指定

内存比例

spark.memory.fraction

默认0.6,上下调一点,大概有5%的效果提升空间

存储内存比例

spark.memory.storageFraction

默认0.5,上下调节,大概有3%的效果,也可能是误差

开启推测执行

spark.speculation=true

开启,大概有5%的提升

autoBroadcastJoinThreshold

spark.sql.autoBroadcastJoinThreshold=20m

调大,对某些任务类型有较大收益

其他(系统)参数

预读分区数

Blockdev=2048

这是Linux系统参数,调大,大概5%效果

使用zstd压缩

spark.io.compression.codec=zstdspark.io.compression.zstd.level=2

以空间换时间,效果不明,或有副作用

sql.codegen

spark.sql.codegen=true

效果不明显,建议开启

Shuffle缓冲大小

spark.shuffle.file.buffer=512k

没啥效果,调一下试试,万一有用

spark调度模式

spark.scheduler.mode=FAIR

默认是FIFO,凑数,有文章说有神效,提升10倍神马的

以上反复测试了挺长时间,可以调节的参数差不多就这些,其余你可以去优化一下代码,调优一下SQL,执行速度上还有改善空间。就说这么多,gg.

咸鱼今天也要努力鸭!