在 spark 2.3 中使用 G1GC 垃圾收集器

Using G1GC garbage collector with spark 2.3

我正在尝试将 G1GC 垃圾收集器用于 spark 作业,但我得到了一个

Error: Invalid argument to --conf: -XX:+UseG1GC

我尝试使用这些选项,但无法正常工作

spark-submit --master spark://192.168.60.20:7077 --conf -XX:+UseG1GC /appdata/bblite-codebase/test.py

spark-submit --master spark://192.168.60.20:7077 -XX:+UseG1GC /appdata/bblite-codebase/test.py

从 spark 调用 G1GC 收集器的正确方法是什么?

JVM 选项应作为 spark.executor.extraJavaOptions / spark.driver.extraJavaOptions 传递,即

 --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC"

这是在驱动程序和执行程序中配置垃圾收集设置的方法。

spark-submit --master spark://192.168.60.20:7077 \
 --conf "spark.driver.extraJavaOptions=-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \
 --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \
 /appdata/bblite-codebase/test.py

从 Spark 2.4.3 开始,这将不适用于驱动程序 extraJavaOptions,这将产生

的错误
Conflicting collector combinations in option list; please refer to the release notes for the combinations allowed

这是因为默认spark-defaults.conf包括

spark.executor.defaultJavaOptions -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:OnOutOfMemoryError='kill -9 %p' -XX:+UseParallelGC -XX:InitiatingHeapOccupancyPercent=70
spark.driver.defaultJavaOptions  -XX:OnOutOfMemoryError='kill -9 %p' -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxHeapFreeRatio=70 -XX:+CMSClassUnloadingEnabled

它已经包含一个 GC 设置,并且设置两个 GC 选项会导致它抱怨此错误。所以你可能需要:

--conf "spark.executor.defaultJavaOptions=-XX:+UseG1GC"
--conf "spark.driver.defaultJavaOptions=-XX:+UseG1GC"

并添加您想要传播的其他默认值。

或者,您可以编辑 spark-defaults.conf 中的默认值以删除 driver/executor 的 GC 默认值并强制在 extraJavaOptions 中指定它,具体取决于您的用例。