This is an automated email from the ASF dual-hosted git repository.
nicholasjiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/celeborn.git
The following commit(s) were added to refs/heads/main by this push:
new d4044c515 [CELEBORN-1682] Add java tools.jar into classpath for JVM
quake
d4044c515 is described below
commit d4044c51525caf054a90badce8f02ff75d8a41ee
Author: Wang, Fei <[email protected]>
AuthorDate: Mon Nov 4 11:05:10 2024 +0800
[CELEBORN-1682] Add java tools.jar into classpath for JVM quake
### What changes were proposed in this pull request?
Add java tools.jar into classpath for JVM quake.
### Why are the changes needed?
Meet below issue with `celeborn.worker.jvmQuake.enabled=true`, see
https://github.com/apache/celeborn/pull/2061
```
24/11/03 15:51:08,453 ERROR [main] Worker: Initialize worker failed.
java.lang.NoClassDefFoundError: sun/jvmstat/monitor/HostIdentifier
at
org.apache.celeborn.service.deploy.worker.monitor.JVMQuake$.monitoredVm$lzycompute(JVMQuake.scala:180)
at
org.apache.celeborn.service.deploy.worker.monitor.JVMQuake$.monitoredVm(JVMQuake.scala:179)
at
org.apache.celeborn.service.deploy.worker.monitor.JVMQuake$.ygcExitTimeMonitor$lzycompute(JVMQuake.scala:185)
at
org.apache.celeborn.service.deploy.worker.monitor.JVMQuake$.ygcExitTimeMonitor(JVMQuake.scala:184)
at
org.apache.celeborn.service.deploy.worker.monitor.JVMQuake$.org$apache$celeborn$service$deploy$worker$monitor$JVMQuake$$getLastExitTime(JVMQuake.scala:192)
at
org.apache.celeborn.service.deploy.worker.monitor.JVMQuake.start(JVMQuake.scala:66)
at
org.apache.celeborn.service.deploy.worker.Worker.<init>(Worker.scala:360)
at
org.apache.celeborn.service.deploy.worker.Worker$.main(Worker.scala:1041)
at org.apache.celeborn.service.deploy.worker.Worker.main(Worker.scala)
Caused by: java.lang.ClassNotFoundException:
sun.jvmstat.monitor.HostIdentifier
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 9 more
```
Related code:
https://github.com/apache/celeborn/blob/c12e8881ab5b03e39a8b53d038a283351bf5906c/project/JDKTools.scala#L58-L75
Similar issue: https://github.com/vladimirvivien/jmx-cli/issues/4
After copy the `tools.jar` into worker-jars, the issue got resolved.
It is better that to involve the `tools.jar` automatically without copy.
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
<img width="1202" alt="image"
src="https://github.com/user-attachments/assets/af8f6c0d-9123-4a73-93b5-69836c5f826d">
Closes #2874 from turboFei/jdk_tools.
Authored-by: Wang, Fei <[email protected]>
Signed-off-by: SteNicholas <[email protected]>
---
bin/celeborn-class | 2 +-
sbin/load-celeborn-env.sh | 12 ++++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/bin/celeborn-class b/bin/celeborn-class
index 32db4fe9d..0ee4b213b 100755
--- a/bin/celeborn-class
+++ b/bin/celeborn-class
@@ -80,7 +80,7 @@ if [ ! -d "$CELEBORN_JARS_DIR" ]; then
echo "You need to build CELEBORN with the target \"package\" before running
this program." 1>&2
exit 1
else
- CELEBORN_CLASSPATH="$CELEBORN_CONF_DIR:$HADOOP_CONF_DIR:$CELEBORN_JARS_DIR/*"
+
CELEBORN_CLASSPATH="$CELEBORN_CONF_DIR:$HADOOP_CONF_DIR:$CELEBORN_JARS_DIR/*:$JAVA_TOOLS_JAR"
fi
# Turn off posix mode since it does not allow process substitution
diff --git a/sbin/load-celeborn-env.sh b/sbin/load-celeborn-env.sh
index e44633120..e18ce2942 100755
--- a/sbin/load-celeborn-env.sh
+++ b/sbin/load-celeborn-env.sh
@@ -44,12 +44,24 @@ if [ -n "${JAVA_HOME}" ]; then
else
if [ "$(command -v java)" ]; then
export JAVA="java"
+ JAVA_HOME=$(java -XshowSettings:properties -version 2>&1 > /dev/null |
grep 'java.home' | awk '{print $3}')
else
echo "JAVA_HOME is not set" >&2
exit 1
fi
fi
+# Find the java tools.jar
+if [ -f "${JAVA_HOME}/lib/tools.jar" ]; then
+ export JAVA_TOOLS_JAR="${JAVA_HOME}/lib/tools.jar"
+else
+ if [ -f "${JAVA_HOME}/../lib/tools.jar" ]; then
+ export JAVA_TOOLS_JAR="${JAVA_HOME}/../lib/tools.jar"
+ else
+ echo "WARNING: cannot locate tools.jar. Expected to find it in either
${JAVA_HOME}/lib/tools.jar or ${JAVA_HOME}/../lib/tools.jar"
+ fi
+fi
+
# Get log directory
if [ "$CELEBORN_LOG_DIR" = "" ]; then
export CELEBORN_LOG_DIR="${CELEBORN_HOME}/logs"