禁用向量化读取器(vectorized reader)
set spark.sql.parquet.enableVectorizedReader = false;
调整Spark作业的动态资源分配和执行器内存设置
-
spark.dynamicAllocation.enabled=true
:启用动态资源分配。当设置为true时,Spark会根据作业需求动态增加或减少执行器(executor)的数量。 -
spark.dynamicAllocation.initialExecutors=500
:设置初始执行器的数量为500。这是在作业开始时Spark会申请的执行器数量。 -
spark.dynamicAllocation.minExecutors=1500
:设置最小执行器数量为1500。这是Spark在动态调整时保留的最小执行器数量。 -
spark.dynamicAllocation.maxExecutors=6000
:设置最大执行器数量为6000。这是Spark在动态调整时可以达到的最大执行器数量。 -
spark.executor.memory=64g
:设置每个执行器的内存为64GB。这是分配给每个执行器的内存量,用于存储任务数据和运行任务。 -
spark.sql.files.maxPartitionBytes=1073741824
:设置每个分区的最大字节数为1GB(1073741824
是1GB的字节表示)。这是Spark SQL在处理文件时,每个分区可以处理的最大数据量。
spark.sql.files.maxPartitionBytes 是 Apache Spark 中的一个配置参数,它用来指定在读取文件时,单个分区中可以包含的最大字节数。默认情况下,这个值是 134217728 字节,也就是 128 MB 。这个参数只在使用基于文件的数据源,如 Parquet、JSON 和 ORC 时生效 。通过调整这个参数,可以控制文件读取时分区的大小,进而影响 Spark 作业的并行度和性能。
spark.sql.adaptive.maxNumPostShufflePartitions=10000
:设置在执行shuffle操作后,Spark SQL自适应查询优化可以产生的最多分区数为8800。这个参数影响查询优化器在执行聚合操作时的分区策略。
这些设置通常用于大规模数据处理作业,以确保资源的有效利用和作业性能的最优化。请注意,这些参数需要根据您的具体需求和集群资源情况进行调整。过高的设置可能会导致资源浪费或集群过载,而过低的设置可能会导致性能不足。