andrey-borisov-patrianna opened a new issue, #56939:
URL: https://github.com/apache/spark/issues/56939

    ---
     ## Spark 4.2.0-preview5 fails at SparkContext init on JDK 26: 
ClassNotFoundException: jdk.internal.ref.Cleaner
   
     ### Description
   
     `org.apache.spark.unsafe.Platform` fails to initialize on **JDK 26** 
because its
     static initializer attempts to load `jdk.internal.ref.Cleaner` by name, 
which no
     longer exists / is no longer accessible in JDK 26. The failure surfaces as 
an
     `ExceptionInInitializerError` the first time 
`SparkSession.builder().getOrCreate()`
     creates a `SparkContext`, making Spark completely unusable on JDK 26.
   
     The root cause is in `Platform.<clinit>` (Platform.java:84 / :104), which 
resolves a
     `Cleaner` class via `Class.forName("jdk.internal.ref.Cleaner")` and 
rethrows the
     `ClassNotFoundException` wrapped in an `IllegalStateException`.
   
     ### Affected version
   
     - **Spark:** 4.2.0-preview5
     - **Scala:** 2.13.18
     - **JDK:** OpenJDK 26.0.1 (Homebrew build 26.0.1)
     - **OS:** macOS (Darwin 25.5.0)
   
     ### Steps to reproduce
   
     1. Build/run with JDK 26.
     2. Create a local `SparkSession`:
        ```java
        SparkSession.builder()
            .master("local[*]")
            .getOrCreate();
   
     Actual behavior
   
     java.lang.ExceptionInInitializerError
         at 
org.apache.spark.unsafe.array.ByteArrayMethods.<clinit>(ByteArrayMethods.java:47)
         at 
org.apache.spark.memory.MemoryManager.defaultPageSizeBytes$lzycompute(MemoryManager.scala:261)
         at 
org.apache.spark.memory.MemoryManager.defaultPageSizeBytes(MemoryManager.scala:251)
         at 
org.apache.spark.memory.MemoryManager.$anonfun$pageSizeBytes$1(MemoryManager.scala:271)
         at 
scala.runtime.java8.JFunction0$mcJ$sp.apply(JFunction0$mcJ$sp.scala:17)
         at scala.Option.getOrElse(Option.scala:201)
         at 
org.apache.spark.memory.MemoryManager.<init>(MemoryManager.scala:271)
         at 
org.apache.spark.memory.UnifiedMemoryManager.<init>(UnifiedMemoryManager.scala:67)
         at 
org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:456)
         at 
org.apache.spark.SparkEnv.initializeMemoryManager(SparkEnv.scala:261)
       at 
org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:456)
       at org.apache.spark.SparkEnv.initializeMemoryManager(SparkEnv.scala:261)
       at org.apache.spark.SparkContext.<init>(SparkContext.scala:597)
       at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:3075)
       at 
org.apache.spark.sql.classic.SparkSession$Builder.$anonfun$build$2(SparkSession.scala:1045)
       at scala.Option.getOrElse(Option.scala:201)
       at 
org.apache.spark.sql.classic.SparkSession$Builder.build(SparkSession.scala:1036)
       at 
org.apache.spark.sql.classic.SparkSession$Builder.getOrCreate(SparkSession.scala:1065)
       at 
org.apache.spark.sql.classic.SparkSession$Builder.getOrCreate(SparkSession.scala:938)
       at 
org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:929)
   Caused by: java.lang.IllegalStateException: 
java.lang.ClassNotFoundException: jdk.internal.ref.Cleaner
       at org.apache.spark.unsafe.Platform.<clinit>(Platform.java:104)
       ... 19 more
   Caused by: java.lang.ClassNotFoundException: jdk.internal.ref.Cleaner
       at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
       at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:502)
       at java.base/java.lang.Class.forName0(Native Method)
       at java.base/java.lang.Class.forName(Class.java:478)
       at java.base/java.lang.Class.forName(Class.java:468)
       at org.apache.spark.unsafe.Platform.<clinit>(Platform.java:84)
       ... 19 more
   
   Expected behavior
   
   Platform should initialize successfully on JDK 26 and SparkContext creation
   should complete. Platform.<clinit> should tolerate the absence of
   jdk.internal.ref.Cleaner (e.g. fall back gracefully when the class cannot be
   resolved) rather than propagating the ClassNotFoundException as an
   ExceptionInInitializerError.
   
   Notes
   
   - Reproduces deterministically on every getOrCreate() — it is not
   timing/environment dependent.
   - Likely also requires the usual --add-opens/--add-exports JVM flags for
   java.base internals on recent JDKs, but the missing class here is a hard
   removal, not merely an access restriction, so JVM flags alone do not resolve 
it.
   
   ---


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to