This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
The following commit(s) were added to refs/heads/master by this push:
new d217b9ecc IMPALA-14450: Simplify Java version selection
d217b9ecc is described below
commit d217b9ecc6aa68b9a65ebb929735b3f802a18732
Author: Michael Smith <[email protected]>
AuthorDate: Tue Sep 16 13:47:34 2025 -0700
IMPALA-14450: Simplify Java version selection
Removes IMPALA_JAVA_HOME_OVERRIDE and updates version selection. In
order of priority
1. If IMPALA_JDK_VERSION is set, use the OS JDK version from a known
location. This is primarily used when also installing the JDK as part
of automated builds.
2. If JAVA_HOME is set, use it.
3. Look for the system default JDK.
The IMPALA_JDK_VERSION variable is no longer modified to avoid issues
when sourcing impala-config.sh multiple times. JAVA_HOME will be
modified if IMPALA_JDK_VERSION is set; both must be unset to restore
using the system default Java.
If switching between JDKs, now prefer setting JAVA_HOME. If relying on
system Java, unset JAVA_HOME after e.g. update-java-alternatives.
The detected Java version is set in IMPALA_JAVA_TARGET, which is used to
add Java 9+ options and configure the Java compilation target.
Eliminates IMPALA_JDK_VERSION_NUM as it's value was always identical to
IMPALA_JAVA_TARGET.
Stops printing from impala-config-java.sh. It made the output from
impala-config.sh look strange, and the decisions can all be clearly
determined from impala-config.sh printed variables later or the packages
installed in bootstrap_system.sh.
Fixes JAVA_HOME in bootstrap_build.sh on ARM64 systems.
Change-Id: I68435ca69522f8310221a0f3050f13d86568b9da
Reviewed-on: http://gerrit.cloudera.org:8080/23434
Reviewed-by: Impala Public Jenkins <[email protected]>
Tested-by: Impala Public Jenkins <[email protected]>
---
README-build.md | 4 +--
bin/bootstrap_build.sh | 7 ++++-
bin/impala-config-java.sh | 16 +++-------
bin/impala-config.sh | 60 +++++++++++++++++++------------------
bin/set-impala-java-tool-options.sh | 2 +-
5 files changed, 44 insertions(+), 45 deletions(-)
diff --git a/README-build.md b/README-build.md
index 5ee8b357c..0db523f9b 100644
--- a/README-build.md
+++ b/README-build.md
@@ -31,8 +31,8 @@ can do so through the environment variables and scripts
listed below.
| CDP_COMPONENTS_HOME |
"${IMPALA_HOME}/toolchain/cdp_components-${CDP_BUILD_NUMBER}" | Location of the
CDP components within the toolchain. |
| CDH_MAJOR_VERSION | "7" | Identifier used to uniqueify paths for potentially
incompatible component builds. |
| IMPALA_CONFIG_SOURCED | "1" | Set by ${IMPALA_HOME}/bin/impala-config.sh
(internal use) |
-| IMPALA_JAVA_HOME_OVERRIDE | | Specify a non-system Java version. Overrides
IMPALA_JDK_VERSION behavior. |
-| IMPALA_JDK_VERSION | "system" | Set to 8 or 11 to select a system Java
version. Default will set JAVA_HOME based on the javac symlink in PATH. |
+| IMPALA_JDK_VERSION | "" | Set to 8+ to select a system Java version. Empty
value uses JAVA_HOME, or sets it based on system defaults. |
+| JAVA_HOME | "" | Uses Java from JAVA_HOME unless IMPALA_JDK_VERSION is set. |
| JAVA | "${JAVA_HOME}/bin/java" | Java binary location. |
| CLASSPATH | | See bin/set-classpath.sh for details. |
| PYTHONPATH | | See bin/set-pythonpath.sh for details. |
diff --git a/bin/bootstrap_build.sh b/bin/bootstrap_build.sh
index 38b3b8d0a..6ef7d6ce1 100755
--- a/bin/bootstrap_build.sh
+++ b/bin/bootstrap_build.sh
@@ -66,8 +66,13 @@ if [[ $DISTRIB_ID == Ubuntu && $DISTRIB_RELEASE == 20.04 ]];
then
fi
JDK_VERSION=17
+if [[ "$(uname -p)" == 'aarch64' ]]; then
+ PACKAGE_ARCH='arm64'
+else
+ PACKAGE_ARCH='amd64'
+fi
sudo apt-get --yes --quiet install openjdk-${JDK_VERSION}-jdk
openjdk-${JDK_VERSION}-source
-export JAVA_HOME=/usr/lib/jvm/java-${JDK_VERSION}-openjdk-amd64
+export JAVA_HOME=/usr/lib/jvm/java-${JDK_VERSION}-openjdk-${PACKAGE_ARCH}
# Download Maven since the packaged version is pretty old.
: ${IMPALA_TOOLCHAIN_HOST:=native-toolchain.s3.amazonaws.com}
diff --git a/bin/impala-config-java.sh b/bin/impala-config-java.sh
index 2a4f7f8cd..002f1dbbb 100644
--- a/bin/impala-config-java.sh
+++ b/bin/impala-config-java.sh
@@ -15,19 +15,16 @@
# specific language governing permissions and limitations
# under the License.
-IMPALA_JDK_VERSION=${IMPALA_JDK_VERSION:-system}
+IMPALA_JDK_VERSION=${IMPALA_JDK_VERSION:-}
-# Set OS Java package variables for bootstrap_system and Docker builds
-if [[ "${IMPALA_JDK_VERSION}" == "system" || "${IMPALA_JDK_VERSION}" == "8"
]]; then
+# Set OS Java package variables for bootstrap_system and Docker builds.
+# Defaults to installing Java 8.
+if [[ "${IMPALA_JDK_VERSION}" == "" || "${IMPALA_JDK_VERSION}" == "8" ]]; then
UBUNTU_JAVA_VERSION=8
REDHAT_JAVA_VERSION=1.8.0
- export IMPALA_JDK_VERSION_NUM=8
- export IMPALA_JAVA_TARGET=1.8
else
UBUNTU_JAVA_VERSION="${IMPALA_JDK_VERSION}"
REDHAT_JAVA_VERSION="${IMPALA_JDK_VERSION}"
- export IMPALA_JDK_VERSION_NUM="${IMPALA_JDK_VERSION}"
- export IMPALA_JAVA_TARGET="${IMPALA_JDK_VERSION}"
fi
if [[ "$(uname -p)" == 'aarch64' ]]; then
@@ -35,8 +32,3 @@ if [[ "$(uname -p)" == 'aarch64' ]]; then
else
UBUNTU_PACKAGE_ARCH='amd64'
fi
-
-echo "JAVA_HOME: ${JAVA_HOME:-}"
-echo "IMPALA_JDK_VERSION: $IMPALA_JDK_VERSION"
-echo "IMPALA_JDK_VERSION_NUM: $IMPALA_JDK_VERSION_NUM"
-echo "IMPALA_JAVA_TARGET: $IMPALA_JAVA_TARGET"
diff --git a/bin/impala-config.sh b/bin/impala-config.sh
index 36df07267..b4c4ff01f 100755
--- a/bin/impala-config.sh
+++ b/bin/impala-config.sh
@@ -498,27 +498,26 @@ fi
# the JDK version as part of bin/impala-config-local.sh
# Decision tree:
-# if IMPALA_JAVA_HOME_OVERRIDE is set, respect it
-# else if IMPALA_JDK_VERSION == system, look for system JDK
-# else if IMPALA_JDK_VERSION == 8+, look for Java 8+ JDK
+# if IMPALA_JDK_VERSION is set, look for that version based on known locations
+# else if JAVA_HOME is set, use it
+# else look for system JDK
-# Initialize IMPALA_JDK_VERSION and set package variables for Docker builds
+# Set package variables for Docker builds and OS-specific detection.
. "$IMPALA_HOME/bin/impala-config-java.sh"
-if [[ -n "${IMPALA_JAVA_HOME_OVERRIDE-}" ]]; then
- IMPALA_JDK_VERSION=override
-fi
-
-DETECTED_JAVA_HOME=Invalid
-if [[ "${IMPALA_JDK_VERSION}" == "system" ]]; then
- # Try to detect the system's JAVA_HOME
- # If javac exists, then the system has a Java SDK (JRE does not have javac).
- # Follow the symbolic links and use this to determine the system's JAVA_HOME.
- DETECTED_JAVA_HOME="/usr/java/default"
- if [ -n "$(which javac)" ]; then
- DETECTED_JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))
+DETECTED_JAVA_HOME=${JAVA_HOME:-}
+if [[ -z "${IMPALA_JDK_VERSION:-}" ]]; then
+ # IMPALA_JDK_VERSION is empty or unset. Use JAVA_HOME or detect system
default.
+ if [[ -z "${DETECTED_JAVA_HOME:-}" ]]; then
+ # Try to detect the system's JAVA_HOME
+ # If javac exists, then the system has a Java SDK (JRE does not have
javac).
+ # Follow the symbolic links and use this to determine the system's
JAVA_HOME.
+ DETECTED_JAVA_HOME="/usr/java/default"
+ if [ -n "$(which javac)" ]; then
+ DETECTED_JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))
+ fi
fi
-elif [[ "${IMPALA_JDK_VERSION}" != "override" ]]; then
+else
# Now, we are looking for a specific version, and that will depend on the
# distribution. Currently, this is implemented for Redhat and Ubuntu.
DISTRIBUTION=Unknown
@@ -534,40 +533,42 @@ elif [[ "${IMPALA_JDK_VERSION}" != "override" ]]; then
fi
if [[ "${DISTRIBUTION}" == "Unknown" ]]; then
echo "ERROR: auto-detection of JAVA_HOME only supported for Ubuntu and
RedHat."
- echo "Use IMPALA_JAVA_HOME_OVERRIDE to configure JAVA_HOME."
+ echo "Set JAVA_HOME to use a specific location."
return 1
fi
JVMS_PATH=/usr/lib/jvm
if [[ "${DISTRIBUTION}" == "Ubuntu" ]]; then
-
JAVA_PACKAGE_NAME="java-${IMPALA_JDK_VERSION}-openjdk-${UBUNTU_PACKAGE_ARCH}"
+
JAVA_PACKAGE_NAME="java-${UBUNTU_JAVA_VERSION}-openjdk-${UBUNTU_PACKAGE_ARCH}"
DETECTED_JAVA_HOME="${JVMS_PATH}/${JAVA_PACKAGE_NAME}"
elif [[ "${DISTRIBUTION}" == "Redhat" ]]; then
- if [[ "${IMPALA_JDK_VERSION}" == "8" ]]; then
- DETECTED_JAVA_HOME="${JVMS_PATH}/java-1.8.0"
- else
- DETECTED_JAVA_HOME="${JVMS_PATH}/java-${IMPALA_JDK_VERSION}"
- fi
+ DETECTED_JAVA_HOME="${JVMS_PATH}/java-${REDHAT_JAVA_VERSION}"
fi
if [[ ! -d "${DETECTED_JAVA_HOME}" ]]; then
echo "ERROR: Could not detect Java ${IMPALA_JDK_VERSION}."\
- "${DETECTED_JAVA_HOME} is not a directory."
+ "${DETECTED_JAVA_HOME} is not a directory."
return 1
fi
fi
-# Prefer the JAVA_HOME set in the environment, but use the system's JAVA_HOME
otherwise
-export JAVA_HOME="${IMPALA_JAVA_HOME_OVERRIDE:-${DETECTED_JAVA_HOME}}"
-if [ ! -d "$JAVA_HOME" ]; then
+# Update JAVA_HOME to the detected JAVA_HOME if it exists.
+if [ ! -d "${DETECTED_JAVA_HOME}" ]; then
echo "JAVA_HOME must be set to the location of your JDK!"
return 1
fi
+export JAVA_HOME="${DETECTED_JAVA_HOME}"
export JAVA="$JAVA_HOME/bin/java"
if [[ ! -e "$JAVA" ]]; then
echo "Could not find java binary at $JAVA" >&2
return 1
fi
+# Target the Java version matching the JDK.
+export IMPALA_JAVA_TARGET=$("$JAVA" -version 2>&1 | awk -F'[\".]' '/version/
{print $2}')
+if [[ $IMPALA_JAVA_TARGET -eq 1 ]]; then
+ # Capture 1.x.
+ IMPALA_JAVA_TARGET=$("$JAVA" -version 2>&1 | awk -F'[\".]' '/version/ {print
$2"."$3}')
+fi
# Java libraries required by executables and java tests.
export LIB_JAVA=$(find "${JAVA_HOME}/" -name libjava.so | head -1)
@@ -1218,6 +1219,7 @@ echo "THRIFT_PY_HOME = $THRIFT_PY_HOME"
echo "CLASSPATH = $CLASSPATH"
echo "LIBHDFS_OPTS = $LIBHDFS_OPTS"
echo "JAVA_HOME = $JAVA_HOME"
+echo "IMPALA_JAVA_TARGET = $IMPALA_JAVA_TARGET"
echo "POSTGRES_JDBC_DRIVER = $POSTGRES_JDBC_DRIVER"
echo "IMPALA_TOOLCHAIN = $IMPALA_TOOLCHAIN"
echo "IMPALA_TOOLCHAIN_PACKAGES_HOME = $IMPALA_TOOLCHAIN_PACKAGES_HOME"
@@ -1278,7 +1280,7 @@ fi
# Check for minimum required Java version
# Only issue Java version warning when running Java 7.
-if $JAVA -version 2>&1 | grep -q 'java version "1.7'; then
+if [[ $IMPALA_JAVA_TARGET -eq 1.7 ]]; then
cat << EOF
WARNING: Your development environment is configured for Hadoop 3 and Java 7.
Hadoop 3
diff --git a/bin/set-impala-java-tool-options.sh
b/bin/set-impala-java-tool-options.sh
index de1d16947..346bb15fb 100755
--- a/bin/set-impala-java-tool-options.sh
+++ b/bin/set-impala-java-tool-options.sh
@@ -22,7 +22,7 @@
export IMPALA_JAVA_TOOL_OPTIONS="${IMPALA_JAVA_TOOL_OPTIONS:-}"
-if (( IMPALA_JDK_VERSION_NUM > 8 )); then
+if (( IMPALA_JAVA_TARGET > 8 )); then
echo "JDK >= 9 detected, adding --add-opens to IMPALA_JAVA_TOOL_OPTIONS"
ADD_OPENS_OPTS=" --add-opens=java.base/java.io=ALL-UNNAMED"
ADD_OPENS_OPTS+=" --add-opens=java.base/java.lang.invoke=ALL-UNNAMED"