Skip to content

Commit b0e30ea

Browse files
pan3793LuciferYang
authored andcommitted
[SPARK-53955][CORE][3.5] Prefer to detect Java Home from env JAVA_HOME on finding jmap for JDK 8
### What changes were proposed in this pull request? Prefer to detect Java Home from env `JAVA_HOME` on finding `jmap`, then System Properties `java.home` ### Why are the changes needed? https://stackoverflow.com/questions/45441516/difference-between-java-home-and-java-home > `JAVA_HOME` points to the JDK installation path given by the Environment Variable. > > But `java.home` points to the JRE installation path. Somehow, it returns the same value in JDK 11+ (according to the following article, users are still able to create a JRE by themselves?), but it returns a different value in JDK 8 or prior https://adoptium.net/news/2021/12/eclipse-temurin-jres-are-back ``` ➜ spark-3.5.7-bin-hadoop3 bin/spark-shell Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 25/10/20 17:59:07 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Spark context Web UI available at http://HIH-D-25944Z:4040 Spark context available as 'sc' (master = local[*], app id = local-1760954347801). Spark session available as 'spark'. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 3.5.7 /_/ Using Scala version 2.12.18 (OpenJDK 64-Bit Server VM, Java 17.0.15) Type in expressions to have them evaluated. Type :help for more information. scala> System.getProperty("java.home") res0: String = /home/chengpan/.sdkman/candidates/java/17.0.15-zulu scala> System.getenv("JAVA_HOME") res1: String = /home/chengpan/.sdkman/candidates/java/17.0.15-zulu ``` ``` ➜ spark-3.5.7-bin-hadoop3 bin/spark-shell Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 25/10/20 17:59:25 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Spark context Web UI available at http://HIH-D-25944Z:4040 Spark context available as 'sc' (master = local[*], app id = local-1760954366052). Spark session available as 'spark'. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 3.5.7 /_/ Using Scala version 2.12.18 (OpenJDK 64-Bit Server VM, Java 1.8.0_432) Type in expressions to have them evaluated. Type :help for more information. scala> System.getProperty("java.home") res0: String = /home/chengpan/.sdkman/candidates/java/8.0.432.fx-zulu/jre scala> System.getenv("JAVA_HOME") res1: String = /home/chengpan/.sdkman/candidates/java/8.0.432.fx-zulu ``` In JDK8, `jmap` exists under `JAVA_HOME/bin`, but not under `JAVA_HOME/jre/bin`. ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? Manually verified. ### Was this patch authored or co-authored using generative AI tooling? No. Closes #52665 from pan3793/SPARK-53955. Authored-by: Cheng Pan <[email protected]> Signed-off-by: yangjie01 <[email protected]>
1 parent 149ef61 commit b0e30ea

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

core/src/main/scala/org/apache/spark/util/Utils.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2142,7 +2142,8 @@ private[spark] object Utils
21422142
def getHeapHistogram(): Array[String] = {
21432143
// From Java 9+, we can use 'ProcessHandle.current().pid()'
21442144
val pid = getProcessName().split("@").head
2145-
val jmap = System.getProperty("java.home") + "/bin/jmap"
2145+
val jmap = Option(System.getenv("JAVA_HOME"))
2146+
.getOrElse(System.getProperty("java.home")) + "/bin/jmap"
21462147
val builder = new ProcessBuilder(jmap, "-histo:live", pid)
21472148
val p = builder.start()
21482149
val rows = ArrayBuffer.empty[String]

0 commit comments

Comments
 (0)