自定义垃圾回收阻止群集启动

问题

你尝试在运行 Databricks Runtime 10.0 及更高版本的群集上使用自定义 Apache Spark 垃圾回收算法而不是默认的算法(并行垃圾回收)。 当你尝试启动群集时,群集未能启动。 如果在执行程序上设置此配置,执行程序会被立即终止。

例如,如果在 Spark 配置中设置以下任一自定义垃圾回收算法,群集创建会失败。

Spark 驱动程序

spark.driver.extraJavaOptions  -XX:+UseG1GC

Spark 执行程序

spark.executor.extraJavaOptions -XX:+UseG1GC

原因

引入了一个新的 Java 虚拟机 (JVM) 标志,用于将垃圾回收算法设置为并行垃圾回收。 如果不更改默认值,则该更改没有影响。

如果在 Spark 配置中通过设置 spark.executor.extraJavaOptionsspark.driver.extraJavaOptions 来更改垃圾回收算法,则该值与新标志冲突。 因此,JVM 崩溃,阻止群集启动。

解决方案

若要解决此问题,必须在 Spark 配置中显式删除并行垃圾回收标志。必须在群集级别完成此操作。

spark.driver.extraJavaOptions -XX:-UseParallelGC -XX:+UseG1GC

spark.executor.extraJavaOptions -XX:-UseParallelGC -XX:+UseG1GC