Spark最常用的调优参数

如何设置Spark资源并行度?

Spark 资源并行度由Executor数量和Executor CPU核数共同决定,任务可并行执行的最大Task数量为Executor数量 * Executor CPU核数

  • Executor数量

    • 参数:spark.executor.instances

    • 参数说明:该参数用于设置作业申请的Executor数量。

  • Executor CPU核数

    • 参数:spark.executor.cores

    • 参数说明:该参数用于设置每个Executor进程的CPU核数,决定每个Executor进程并行执行Task的能力,每个CPU核同一时间只能执行一个Task。通常ExecutorCPU核数设置为2~4较为合适。

如何解决内存不足问题?

  • 常见报错:

    • java.lang.OutOfMemoryError: Java heap space

    • java.lang.OutOfMemoryError: GC overhead limit exceeded

    • Cannot allocate memory

    • The job has been killed by "OOM Killer", please check your job's memory usage

  • 解决方案:

    • 设置Executor内存。

      • 参数:spark.executor.memory

      • 参数说明:代表每个Executor的内存。通常与spark.executor.cores保持1:4设置即可,例如设置spark.executor.cores1spark.executor.memory4 GB。当Executor抛出java.lang.OutOfMemoryError异常时,需要调大该值。

    • 设置Executor堆外内存。

      • 参数:spark.executor.memoryOverhead

      • 参数说明:代表每个Executor的额外内存,主要用于JVM自身、字符串、NIO Buffer等开销。默认大小为spark.executor.memory * 0.1,最小384 MB。通常不需要额外设置,当Executor日志出现Cannot allocate memoryOOM Killer报错时,需要调大该值。

    • 设置Driver内存。

      • 参数:spark.driver.memory

      • 参数说明:代表Driver的内存大小。通常与spark.driver.cores保持1:4设置即可。当Driver需要Collect较大数据量,或抛出java.lang.OutOfMemoryError异常时,需要调大该值。

    • 设置Driver堆外内存。

      • 参数:spark.driver.memoryOverhead

      • 参数说明:代表Driver的额外内存。默认为大小spark.driver.memory * 0.1,最小384 MB。当Driver日志出现Cannot allocate memory报错,需要调大该值。

posted @ 2025-04-11 22:16  业余砖家  阅读(378)  评论(0)    收藏  举报