自定义垃圾回收阻止群集启动
问题
你尝试在运行 Databricks Runtime 10.0 及更高版本的群集上使用自定义 Apache Spark 垃圾回收算法而不是默认的算法(并行垃圾回收)。 当你尝试启动群集时,群集未能启动。 如果在执行程序上设置此配置,执行程序会被立即终止。
例如,如果在 Spark 配置中设置以下任一自定义垃圾回收算法,群集创建会失败。
Spark 驱动程序
spark.driver.extraJavaOptions -XX:+UseG1GC
Spark 执行程序
spark.executor.extraJavaOptions -XX:+UseG1GC
原因
引入了一个新的 Java 虚拟机 (JVM) 标志,用于将垃圾回收算法设置为并行垃圾回收。 如果不更改默认值,则该更改没有影响。
如果在 Spark 配置中通过设置 spark.executor.extraJavaOptions 或 spark.driver.extraJavaOptions 来更改垃圾回收算法,则该值与新标志冲突。 因此,JVM 崩溃,阻止群集启动。
解决方案
若要解决此问题,必须在 Spark 配置中显式删除并行垃圾回收标志。必须在群集级别完成此操作。
spark.driver.extraJavaOptions -XX:-UseParallelGC -XX:+UseG1GC
spark.executor.extraJavaOptions -XX:-UseParallelGC -XX:+UseG1GC