From a88ed90b3896b01ee503e9fe6144a8289ab852d0 Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Mon, 9 Feb 2026 12:42:01 +0530 Subject: [PATCH 01/14] HIVE-29439: Upgrade SLF4J to 2.0.13 --- beeline/pom.xml | 2 +- common/pom.xml | 2 +- druid-handler/pom.xml | 4 ++ jdbc-handler/pom.xml | 6 --- kudu-handler/pom.xml | 6 +++ llap-server/pom.xml | 4 ++ .../hive/llap/daemon/impl/QueryTracker.java | 5 +- pom.xml | 49 ++++++++++++++++++- ql/pom.xml | 2 +- serde/pom.xml | 6 --- standalone-metastore/metastore-common/pom.xml | 5 -- standalone-metastore/metastore-server/pom.xml | 8 +-- .../metastore-benchmarks/pom.xml | 2 +- standalone-metastore/pom.xml | 20 +++++--- storage-api/pom.xml | 8 +-- 15 files changed, 81 insertions(+), 48 deletions(-) diff --git a/beeline/pom.xml b/beeline/pom.xml index 2198bd72e613..261b7ebac601 100644 --- a/beeline/pom.xml +++ b/beeline/pom.xml @@ -125,7 +125,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl diff --git a/common/pom.xml b/common/pom.xml index bffc3d3f357f..4ca3a048d946 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -124,7 +124,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl org.apache.commons diff --git a/druid-handler/pom.xml b/druid-handler/pom.xml index dcc5ebd8a481..cb43f18f6007 100644 --- a/druid-handler/pom.xml +++ b/druid-handler/pom.xml @@ -106,6 +106,10 @@ com.fasterxml.jackson.core jackson-databind + + org.apache.logging.log4j + log4j-slf4j-impl + org.apache.druid druid-aws-common diff --git a/jdbc-handler/pom.xml b/jdbc-handler/pom.xml index 8ab4fa371ef1..94c833991d8d 100644 --- a/jdbc-handler/pom.xml +++ b/jdbc-handler/pom.xml @@ -130,11 +130,5 @@ ${h2database.version} test - - org.slf4j - slf4j-simple - ${slf4j.version} - test - diff --git a/kudu-handler/pom.xml b/kudu-handler/pom.xml index a778cd7b63f9..ede4527d729f 100644 --- a/kudu-handler/pom.xml +++ b/kudu-handler/pom.xml @@ -112,6 +112,12 @@ kudu-test-utils ${kudu.version} test + + + org.apache.logging.log4j + log4j-slf4j-impl + + diff --git a/llap-server/pom.xml b/llap-server/pom.xml index a691cee6e1ed..ccbc5c7e4762 100644 --- a/llap-server/pom.xml +++ b/llap-server/pom.xml @@ -350,6 +350,10 @@ + + org.apache.logging.log4j + log4j-slf4j2-impl + org.apache.logging.log4j log4j-core-test diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/QueryTracker.java b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/QueryTracker.java index 39eda657d5a8..0c9b15bb7b18 100644 --- a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/QueryTracker.java +++ b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/QueryTracker.java @@ -29,7 +29,6 @@ import org.apache.hadoop.security.Credentials; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.token.Token; -import org.apache.logging.slf4j.Log4jMarker; import org.apache.tez.common.CallableWithNdc; import org.apache.hadoop.service.AbstractService; @@ -50,7 +49,7 @@ import org.slf4j.LoggerFactory; import org.slf4j.MDC; import org.slf4j.Marker; -import org.slf4j.impl.StaticMarkerBinder; +import org.slf4j.MarkerFactory; import java.io.IOException; import java.util.Collections; @@ -71,7 +70,7 @@ public class QueryTracker extends AbstractService { private static final Logger LOG = LoggerFactory.getLogger(QueryTracker.class); private static final Marker QUERY_COMPLETE_MARKER = - new Log4jMarker(StaticMarkerBinder.getSingleton().getMarkerFactory(), new Log4jQueryCompleteMarker()); + MarkerFactory.getMarker(Log4jQueryCompleteMarker.EOF_MARKER); /// Shared singleton MetricsSource instance for all DAG locks private static final MetricsSource LOCK_METRICS; diff --git a/pom.xml b/pom.xml index ae48bf9ba4f4..b924e1b858c1 100644 --- a/pom.xml +++ b/pom.xml @@ -204,7 +204,7 @@ 0.16.1 1.3.0 1.0.1 - 1.7.30 + 2.0.13 4.0.4 4.3.0-SNAPSHOT 0.10.5 @@ -494,7 +494,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl ${log4j2.version} @@ -654,6 +654,17 @@ + + org.apache.hive + hive-exec + ${project.version} + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.apache.hive hive-storage-api @@ -924,6 +935,16 @@ slf4j-api ${slf4j.version} + + org.slf4j + slf4j-reload4j + 2.0.13 + + + org.slf4j + jcl-over-slf4j + 2.0.13 + xerces xercesImpl @@ -972,6 +993,14 @@ hadoop-common ${hadoop.version} + + org.apache.logging.log4j + log4j-slf4j2-impl + + + org.apache.logging.log4j + log4j-slf4j-impl + org.slf4j slf4j-log4j12 @@ -1321,6 +1350,12 @@ org.apache.tez tez-runtime-internals ${tez.version} + + + org.slf4j + slf4j-reload4j + + org.apache.tez @@ -1492,9 +1527,19 @@ + + org.apache.logging.log4j + log4j-slf4j2-impl + org.slf4j slf4j-api + + + org.apache.logging.log4j + log4j-slf4j2-impl + + diff --git a/ql/pom.xml b/ql/pom.xml index 994dbacf4e84..fc7f63333ae7 100644 --- a/ql/pom.xml +++ b/ql/pom.xml @@ -228,7 +228,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl org.antlr diff --git a/serde/pom.xml b/serde/pom.xml index 5c4f638213ed..54500eb90371 100644 --- a/serde/pom.xml +++ b/serde/pom.xml @@ -224,12 +224,6 @@ - - org.slf4j - slf4j-simple - ${slf4j.version} - test - com.esri.geometry esri-geometry-api diff --git a/standalone-metastore/metastore-common/pom.xml b/standalone-metastore/metastore-common/pom.xml index 640e68d8ad18..672aa38e8429 100644 --- a/standalone-metastore/metastore-common/pom.xml +++ b/standalone-metastore/metastore-common/pom.xml @@ -330,11 +330,6 @@ ${mockito-core.version} test - - org.slf4j - slf4j-simple - test - diff --git a/standalone-metastore/metastore-server/pom.xml b/standalone-metastore/metastore-server/pom.xml index 64926eaba1c9..c36ec7663ae4 100644 --- a/standalone-metastore/metastore-server/pom.xml +++ b/standalone-metastore/metastore-server/pom.xml @@ -63,12 +63,6 @@ org.apache.datasketches datasketches-hive - - - org.slf4j - slf4j-simple - - org.reflections @@ -270,7 +264,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl org.apache.logging.log4j diff --git a/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml b/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml index 4e38d2dc1441..68263b77661b 100644 --- a/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml +++ b/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml @@ -81,7 +81,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index 30ca1bf00f4d..55f1f11ee5d5 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -116,7 +116,7 @@ 9.2.1 4.8.6 2.8.4 - 1.7.30 + 2.0.13 4.4.13 4.5.13 4.5.8 @@ -317,7 +317,7 @@ org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl ${log4j2.version} @@ -392,6 +392,16 @@ slf4j-api ${slf4j.version} + + org.slf4j + slf4j-reload4j + 2.0.13 + + + org.slf4j + jcl-over-slf4j + 2.0.13 + org.springframework spring-jdbc @@ -537,12 +547,6 @@ - - org.slf4j - slf4j-simple - ${slf4j.version} - test - org.keycloak keycloak-admin-client diff --git a/storage-api/pom.xml b/storage-api/pom.xml index 3627fc9cf270..16dccac6f563 100644 --- a/storage-api/pom.xml +++ b/storage-api/pom.xml @@ -35,7 +35,7 @@ 4.13.2 5.13.3 5.13.3 - 1.7.30 + 2.0.13 4.8.6 3.5.0 2.7.10 @@ -166,12 +166,6 @@ ${junit.vintage.version} test - - org.slf4j - slf4j-simple - ${slf4j.version} - test - ${basedir}/src/java From de13a2d9f159e243dd9e99cecd64ecf630c8a02a Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Mon, 9 Feb 2026 16:03:40 +0530 Subject: [PATCH 02/14] bin/ext/util/execHiveCmd.sh changed --- bin/ext/util/execHiveCmd.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/bin/ext/util/execHiveCmd.sh b/bin/ext/util/execHiveCmd.sh index 9a06ce01afe3..72dc50ac143a 100644 --- a/bin/ext/util/execHiveCmd.sh +++ b/bin/ext/util/execHiveCmd.sh @@ -42,6 +42,36 @@ execHiveCmd () { HIVE_LIB=`cygpath -w "$HIVE_LIB"` fi + # For services that may encounter SLF4J conflicts (schemaTool, beeline), + # filter out old SLF4J 1.x jars from HADOOP_CLASSPATH to prevent binding conflicts + if [[ "$SERVICE" =~ ^(schemaTool|beeline)$ ]]; then + # Filter HADOOP_CLASSPATH to remove paths with old SLF4J/log4j bindings + if [ "$HADOOP_CLASSPATH" != "" ]; then + FILTERED_CP="" + IFS=':' read -ra CP_ARRAY <<< "$HADOOP_CLASSPATH" + for cp_entry in "${CP_ARRAY[@]}"; do + # Skip wildcard paths pointing to Tez/Hadoop lib directories that contain old SLF4J + # This prevents slf4j-log4j12-1.7.x from being loaded alongside slf4j-api-2.0.x + if [[ "$cp_entry" == */tez*/lib/* || "$cp_entry" == */tez*/* ]] && [[ "$cp_entry" == *"*"* ]]; then + continue + fi + if [[ "$cp_entry" == */hadoop*/lib/* ]] && [[ "$cp_entry" == *"*"* ]]; then + continue + fi + # Skip explicit SLF4J 1.x jar paths + if [[ "$cp_entry" == *slf4j-log4j12* || "$cp_entry" == *slf4j-reload4j* ]]; then + continue + fi + if [ "$FILTERED_CP" == "" ]; then + FILTERED_CP="$cp_entry" + else + FILTERED_CP="${FILTERED_CP}:${cp_entry}" + fi + done + export HADOOP_CLASSPATH="$FILTERED_CP" + fi + fi + # hadoop 20 or newer - skip the aux_jars option. picked up from hiveconf exec $HADOOP jar ${HIVE_LIB}/$JAR $CLASS $HIVE_OPTS "$@" } From b4b53af1587e7a991312d8a291afdc3894352023 Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Mon, 9 Feb 2026 21:20:48 +0530 Subject: [PATCH 03/14] 5 files modified --- .../main/resources/beeline-log4j2.properties | 1 + .../src/main/resources/hive-log4j2.properties | 1 + data/conf/hive-log4j2.properties | 1 + packaging/pom.xml | 20 +++++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/beeline/src/main/resources/beeline-log4j2.properties b/beeline/src/main/resources/beeline-log4j2.properties index 2443ee2b0e1b..514c9968102a 100644 --- a/beeline/src/main/resources/beeline-log4j2.properties +++ b/beeline/src/main/resources/beeline-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = BeelineLog4j2 +monitorInterval = 30 # list of properties property.hive.log.level = WARN diff --git a/common/src/main/resources/hive-log4j2.properties b/common/src/main/resources/hive-log4j2.properties index b51e93697b31..60b25cfbc9e3 100644 --- a/common/src/main/resources/hive-log4j2.properties +++ b/common/src/main/resources/hive-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = HiveLog4j2 +monitorInterval = 30 # list of properties property.hive.log.level = INFO diff --git a/data/conf/hive-log4j2.properties b/data/conf/hive-log4j2.properties index 5eb2480a2a6e..6b4ec697b580 100644 --- a/data/conf/hive-log4j2.properties +++ b/data/conf/hive-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = HiveLog4j2Test +monitorInterval = 30 # list of properties property.hive.log.level = DEBUG diff --git a/packaging/pom.xml b/packaging/pom.xml index 9b9ff3c8b499..5ce8db8f1170 100644 --- a/packaging/pom.xml +++ b/packaging/pom.xml @@ -276,6 +276,16 @@ org.apache.hive hive-common ${project.version} + + + org.slf4j + slf4j-log4j12 + + + org.apache.logging.log4j + log4j-slf4j-impl + + org.apache.hive @@ -296,6 +306,16 @@ org.apache.hive hive-exec ${project.version} + + + org.slf4j + slf4j-log4j12 + + + org.apache.logging.log4j + log4j-slf4j-impl + + org.apache.hive From 15cd91c267994ca9f3ac6b5fdcbfc78df2ce8f8c Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Tue, 10 Feb 2026 12:30:40 +0530 Subject: [PATCH 04/14] HIVE-29439: Fix ConfigurationScheduler race in remaining log4j2 configs --- bin/schematool | 0 packaging/src/docker/conf/hive-log4j2.properties | 1 + ql/src/main/resources/hive-exec-log4j2.properties | 1 + ql/src/main/resources/tez-container-log4j2.properties | 1 + .../src/main/resources/metastore-log4j2.properties | 1 + .../packaging/src/docker/conf/metastore-log4j2.properties | 1 + 6 files changed, 5 insertions(+) mode change 100644 => 100755 bin/schematool diff --git a/bin/schematool b/bin/schematool old mode 100644 new mode 100755 diff --git a/packaging/src/docker/conf/hive-log4j2.properties b/packaging/src/docker/conf/hive-log4j2.properties index f176f57f18cb..a2f50b615b30 100644 --- a/packaging/src/docker/conf/hive-log4j2.properties +++ b/packaging/src/docker/conf/hive-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = HiveLog4j2 +monitorInterval = 30 # list of properties property.hive.log.level = INFO diff --git a/ql/src/main/resources/hive-exec-log4j2.properties b/ql/src/main/resources/hive-exec-log4j2.properties index b77b51fabebf..badcba5288f8 100644 --- a/ql/src/main/resources/hive-exec-log4j2.properties +++ b/ql/src/main/resources/hive-exec-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = HiveExecLog4j2 +monitorInterval = 30 # list of properties property.hive.log.level = INFO diff --git a/ql/src/main/resources/tez-container-log4j2.properties b/ql/src/main/resources/tez-container-log4j2.properties index f5a2a4094af3..1b56a1d35b02 100644 --- a/ql/src/main/resources/tez-container-log4j2.properties +++ b/ql/src/main/resources/tez-container-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = TezContainerLog4j2 +monitorInterval = 30 # list of properties property.tez.container.log.level = INFO diff --git a/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties b/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties index d4a26538f18c..010e239ab02b 100644 --- a/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties +++ b/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = MetastoreLog4j2 +monitorInterval = 30 # list of properties property.metastore.log.level = INFO diff --git a/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties b/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties index 02e9114b4cbe..7396d9aedaa8 100644 --- a/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties +++ b/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties @@ -15,6 +15,7 @@ # limitations under the License. name = MetastoreLog4j2 +monitorInterval = 30 # list of properties property.hive.log.level = INFO From 7f000e2b0df35abc8776047b5fd60629849cd4b8 Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Tue, 10 Feb 2026 12:50:17 +0530 Subject: [PATCH 05/14] HIVE-29439: Fix ConfigurationScheduler race in remaining log4j2 configs From db218f03a796130623aacf340569995b459b4a9d Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Tue, 10 Feb 2026 21:22:07 +0530 Subject: [PATCH 06/14] slf4j-reload not needed --- pom.xml | 5 ----- standalone-metastore/pom.xml | 5 ----- 2 files changed, 10 deletions(-) diff --git a/pom.xml b/pom.xml index b924e1b858c1..3f1d96c2b6a2 100644 --- a/pom.xml +++ b/pom.xml @@ -935,11 +935,6 @@ slf4j-api ${slf4j.version} - - org.slf4j - slf4j-reload4j - 2.0.13 - org.slf4j jcl-over-slf4j diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index 55f1f11ee5d5..37dd88c61b2c 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -392,11 +392,6 @@ slf4j-api ${slf4j.version} - - org.slf4j - slf4j-reload4j - 2.0.13 - org.slf4j jcl-over-slf4j From c751465a76f02e789573c7d06c04c80c473632d4 Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Tue, 10 Feb 2026 23:02:42 +0530 Subject: [PATCH 07/14] HIVE-29439: Force Log4j2 to use fresh config, bypass stale /etc/hive --- bin/ext/util/execHiveCmd.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bin/ext/util/execHiveCmd.sh b/bin/ext/util/execHiveCmd.sh index 72dc50ac143a..736624d272f5 100644 --- a/bin/ext/util/execHiveCmd.sh +++ b/bin/ext/util/execHiveCmd.sh @@ -45,6 +45,14 @@ execHiveCmd () { # For services that may encounter SLF4J conflicts (schemaTool, beeline), # filter out old SLF4J 1.x jars from HADOOP_CLASSPATH to prevent binding conflicts if [[ "$SERVICE" =~ ^(schemaTool|beeline)$ ]]; then + # Force Log4j2 to use the fresh config from the build, ignoring stale /etc/hive path + # This ensures monitorInterval=30 is actually applied even when /etc/hive exists + if [ -f "${HIVE_CONF_DIR}/hive-log4j2.properties" ]; then + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_CONF_DIR}/hive-log4j2.properties" + elif [ -f "${HIVE_HOME}/conf/hive-log4j2.properties" ]; then + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_HOME}/conf/hive-log4j2.properties" + fi + # Filter HADOOP_CLASSPATH to remove paths with old SLF4J/log4j bindings if [ "$HADOOP_CLASSPATH" != "" ]; then FILTERED_CP="" From 7f52100f48fe3bf1269a66d7996d51250d9b764c Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Wed, 11 Feb 2026 17:15:56 +0530 Subject: [PATCH 08/14] echo statements added for debugging --- bin/ext/util/execHiveCmd.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bin/ext/util/execHiveCmd.sh b/bin/ext/util/execHiveCmd.sh index 736624d272f5..89c43ce1a3a7 100644 --- a/bin/ext/util/execHiveCmd.sh +++ b/bin/ext/util/execHiveCmd.sh @@ -45,14 +45,25 @@ execHiveCmd () { # For services that may encounter SLF4J conflicts (schemaTool, beeline), # filter out old SLF4J 1.x jars from HADOOP_CLASSPATH to prevent binding conflicts if [[ "$SERVICE" =~ ^(schemaTool|beeline)$ ]]; then + echo "DEBUG: Starting SLF4J conflict check for SERVICE=$SERVICE" + echo "DEBUG: HIVE_CONF_DIR=$HIVE_CONF_DIR" + echo "DEBUG: HIVE_HOME=$HIVE_HOME" + echo "DEBUG: Initial HADOOP_CLIENT_OPTS=$HADOOP_CLIENT_OPTS" + # Force Log4j2 to use the fresh config from the build, ignoring stale /etc/hive path # This ensures monitorInterval=30 is actually applied even when /etc/hive exists if [ -f "${HIVE_CONF_DIR}/hive-log4j2.properties" ]; then + echo "DEBUG: Found config in HIVE_CONF_DIR" export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_CONF_DIR}/hive-log4j2.properties" elif [ -f "${HIVE_HOME}/conf/hive-log4j2.properties" ]; then + echo "DEBUG: Found config in HIVE_HOME/conf" export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_HOME}/conf/hive-log4j2.properties" + else + echo "DEBUG: No local hive-log4j2.properties found" fi - + + echo "DEBUG: Final HADOOP_CLIENT_OPTS=$HADOOP_CLIENT_OPTS" + # Filter HADOOP_CLASSPATH to remove paths with old SLF4J/log4j bindings if [ "$HADOOP_CLASSPATH" != "" ]; then FILTERED_CP="" From ee34e5da1fcf3a0520bfd86f3e6fb6e17c3a724f Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Tue, 17 Feb 2026 12:13:50 +0530 Subject: [PATCH 09/14] Priority changes on the execHiveCmd.sh file and reload4j added back --- bin/ext/util/execHiveCmd.sh | 14 +++++++------- pom.xml | 5 +++++ standalone-metastore/pom.xml | 5 +++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/bin/ext/util/execHiveCmd.sh b/bin/ext/util/execHiveCmd.sh index 89c43ce1a3a7..19f61083a9d1 100644 --- a/bin/ext/util/execHiveCmd.sh +++ b/bin/ext/util/execHiveCmd.sh @@ -50,14 +50,14 @@ execHiveCmd () { echo "DEBUG: HIVE_HOME=$HIVE_HOME" echo "DEBUG: Initial HADOOP_CLIENT_OPTS=$HADOOP_CLIENT_OPTS" - # Force Log4j2 to use the fresh config from the build, ignoring stale /etc/hive path - # This ensures monitorInterval=30 is actually applied even when /etc/hive exists - if [ -f "${HIVE_CONF_DIR}/hive-log4j2.properties" ]; then - echo "DEBUG: Found config in HIVE_CONF_DIR" - export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_CONF_DIR}/hive-log4j2.properties" - elif [ -f "${HIVE_HOME}/conf/hive-log4j2.properties" ]; then - echo "DEBUG: Found config in HIVE_HOME/conf" + # [FIX]: Check HIVE_HOME/conf FIRST. This ensures we use the built config with the fix. + if [ -f "${HIVE_HOME}/conf/hive-log4j2.properties" ]; then + echo "DEBUG: Found config in HIVE_HOME/conf (Priority)" export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_HOME}/conf/hive-log4j2.properties" + # Only fall back to the system default if the build config is missing + elif [ -f "${HIVE_CONF_DIR}/hive-log4j2.properties" ]; then + echo "DEBUG: Found config in HIVE_CONF_DIR (Fallback)" + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_CONF_DIR}/hive-log4j2.properties" else echo "DEBUG: No local hive-log4j2.properties found" fi diff --git a/pom.xml b/pom.xml index 3f1d96c2b6a2..b924e1b858c1 100644 --- a/pom.xml +++ b/pom.xml @@ -935,6 +935,11 @@ slf4j-api ${slf4j.version} + + org.slf4j + slf4j-reload4j + 2.0.13 + org.slf4j jcl-over-slf4j diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index 37dd88c61b2c..55f1f11ee5d5 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -392,6 +392,11 @@ slf4j-api ${slf4j.version} + + org.slf4j + slf4j-reload4j + 2.0.13 + org.slf4j jcl-over-slf4j From dfd9e04ea9e31916a2bcf11ff5d65a1ad99719af Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Wed, 18 Feb 2026 12:39:50 +0530 Subject: [PATCH 10/14] This commit addresses all CI failures and configuration issues from the SLF4J upgrade from 1.7.30 to 2.0.13. The primary failures were in metastore schema initialization tests for Derby and PostgreSQL, caused by SLF4J binding conflicts, missing test bindings, overly broad classpath filtering, and incomplete dependency configuration. --- beeline/pom.xml | 4 + .../main/resources/beeline-log4j2.properties | 1 - bin/ext/util/execHiveCmd.sh | 25 +--- common/pom.xml | 4 + .../src/main/resources/hive-log4j2.properties | 1 - data/conf/hive-log4j2.properties | 1 - jdbc-handler/pom.xml | 6 + llap-server/pom.xml | 4 + packaging/pom.xml | 8 ++ .../src/docker/conf/hive-log4j2.properties | 1 - pom.xml | 120 +++++++++++++++--- .../resources/hive-exec-log4j2.properties | 1 - .../resources/tez-container-log4j2.properties | 1 - serde/pom.xml | 6 + standalone-metastore/metastore-common/pom.xml | 6 + standalone-metastore/metastore-server/pom.xml | 6 + .../resources/metastore-log4j2.properties | 1 - .../metastore-benchmarks/pom.xml | 4 + .../docker/conf/metastore-log4j2.properties | 1 - standalone-metastore/pom.xml | 10 +- storage-api/pom.xml | 6 + 21 files changed, 170 insertions(+), 47 deletions(-) diff --git a/beeline/pom.xml b/beeline/pom.xml index 261b7ebac601..d7104200c510 100644 --- a/beeline/pom.xml +++ b/beeline/pom.xml @@ -127,6 +127,10 @@ org.apache.logging.log4j log4j-slf4j2-impl + + org.apache.logging.log4j + log4j-core + org.apache.hive diff --git a/beeline/src/main/resources/beeline-log4j2.properties b/beeline/src/main/resources/beeline-log4j2.properties index 514c9968102a..2443ee2b0e1b 100644 --- a/beeline/src/main/resources/beeline-log4j2.properties +++ b/beeline/src/main/resources/beeline-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = BeelineLog4j2 -monitorInterval = 30 # list of properties property.hive.log.level = WARN diff --git a/bin/ext/util/execHiveCmd.sh b/bin/ext/util/execHiveCmd.sh index 19f61083a9d1..61b28a653cb9 100644 --- a/bin/ext/util/execHiveCmd.sh +++ b/bin/ext/util/execHiveCmd.sh @@ -42,39 +42,26 @@ execHiveCmd () { HIVE_LIB=`cygpath -w "$HIVE_LIB"` fi - # For services that may encounter SLF4J conflicts (schemaTool, beeline), + # For services that may encounter SLF4J conflicts (schemaTool, schematool, beeline), # filter out old SLF4J 1.x jars from HADOOP_CLASSPATH to prevent binding conflicts - if [[ "$SERVICE" =~ ^(schemaTool|beeline)$ ]]; then - echo "DEBUG: Starting SLF4J conflict check for SERVICE=$SERVICE" - echo "DEBUG: HIVE_CONF_DIR=$HIVE_CONF_DIR" - echo "DEBUG: HIVE_HOME=$HIVE_HOME" - echo "DEBUG: Initial HADOOP_CLIENT_OPTS=$HADOOP_CLIENT_OPTS" - + if [[ "$SERVICE" =~ ^(schemaTool|schematool|beeline)$ ]]; then # [FIX]: Check HIVE_HOME/conf FIRST. This ensures we use the built config with the fix. if [ -f "${HIVE_HOME}/conf/hive-log4j2.properties" ]; then - echo "DEBUG: Found config in HIVE_HOME/conf (Priority)" export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_HOME}/conf/hive-log4j2.properties" # Only fall back to the system default if the build config is missing elif [ -f "${HIVE_CONF_DIR}/hive-log4j2.properties" ]; then - echo "DEBUG: Found config in HIVE_CONF_DIR (Fallback)" export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_CONF_DIR}/hive-log4j2.properties" - else - echo "DEBUG: No local hive-log4j2.properties found" fi - echo "DEBUG: Final HADOOP_CLIENT_OPTS=$HADOOP_CLIENT_OPTS" - # Filter HADOOP_CLASSPATH to remove paths with old SLF4J/log4j bindings if [ "$HADOOP_CLASSPATH" != "" ]; then FILTERED_CP="" IFS=':' read -ra CP_ARRAY <<< "$HADOOP_CLASSPATH" for cp_entry in "${CP_ARRAY[@]}"; do - # Skip wildcard paths pointing to Tez/Hadoop lib directories that contain old SLF4J - # This prevents slf4j-log4j12-1.7.x from being loaded alongside slf4j-api-2.0.x - if [[ "$cp_entry" == */tez*/lib/* || "$cp_entry" == */tez*/* ]] && [[ "$cp_entry" == *"*"* ]]; then - continue - fi - if [[ "$cp_entry" == */hadoop*/lib/* ]] && [[ "$cp_entry" == *"*"* ]]; then + # Skip only specific SLF4J 1.x binding jars by filename + if [[ "$(basename "$cp_entry")" == slf4j-log4j12-*.jar || \ + "$(basename "$cp_entry")" == slf4j-reload4j-*.jar || \ + "$(basename "$cp_entry")" == log4j-slf4j-impl-*.jar ]]; then continue fi # Skip explicit SLF4J 1.x jar paths diff --git a/common/pom.xml b/common/pom.xml index 4ca3a048d946..233229fc1616 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -126,6 +126,10 @@ org.apache.logging.log4j log4j-slf4j2-impl + + org.apache.logging.log4j + log4j-core + org.apache.commons commons-compress diff --git a/common/src/main/resources/hive-log4j2.properties b/common/src/main/resources/hive-log4j2.properties index 60b25cfbc9e3..b51e93697b31 100644 --- a/common/src/main/resources/hive-log4j2.properties +++ b/common/src/main/resources/hive-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = HiveLog4j2 -monitorInterval = 30 # list of properties property.hive.log.level = INFO diff --git a/data/conf/hive-log4j2.properties b/data/conf/hive-log4j2.properties index 6b4ec697b580..5eb2480a2a6e 100644 --- a/data/conf/hive-log4j2.properties +++ b/data/conf/hive-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = HiveLog4j2Test -monitorInterval = 30 # list of properties property.hive.log.level = DEBUG diff --git a/jdbc-handler/pom.xml b/jdbc-handler/pom.xml index 94c833991d8d..8ab4fa371ef1 100644 --- a/jdbc-handler/pom.xml +++ b/jdbc-handler/pom.xml @@ -130,5 +130,11 @@ ${h2database.version} test + + org.slf4j + slf4j-simple + ${slf4j.version} + test + diff --git a/llap-server/pom.xml b/llap-server/pom.xml index ccbc5c7e4762..d6158097c5ca 100644 --- a/llap-server/pom.xml +++ b/llap-server/pom.xml @@ -354,6 +354,10 @@ org.apache.logging.log4j log4j-slf4j2-impl + + org.apache.logging.log4j + log4j-core + org.apache.logging.log4j log4j-core-test diff --git a/packaging/pom.xml b/packaging/pom.xml index 5ce8db8f1170..c880f6cc50e6 100644 --- a/packaging/pom.xml +++ b/packaging/pom.xml @@ -492,5 +492,13 @@ hive-kudu-handler ${project.version} + + org.apache.logging.log4j + log4j-slf4j2-impl + + + org.apache.logging.log4j + log4j-core + diff --git a/packaging/src/docker/conf/hive-log4j2.properties b/packaging/src/docker/conf/hive-log4j2.properties index a2f50b615b30..f176f57f18cb 100644 --- a/packaging/src/docker/conf/hive-log4j2.properties +++ b/packaging/src/docker/conf/hive-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = HiveLog4j2 -monitorInterval = 30 # list of properties property.hive.log.level = INFO diff --git a/pom.xml b/pom.xml index b924e1b858c1..7ffebc332da0 100644 --- a/pom.xml +++ b/pom.xml @@ -497,6 +497,11 @@ log4j-slf4j2-impl ${log4j2.version} + + org.apache.logging.log4j + log4j-core + ${log4j2.version} + org.antlr antlr-runtime @@ -935,11 +940,6 @@ slf4j-api ${slf4j.version} - - org.slf4j - slf4j-reload4j - 2.0.13 - org.slf4j jcl-over-slf4j @@ -959,6 +959,14 @@ commons-logging commons-logging + + org.slf4j + slf4j-reload4j + + + org.slf4j + slf4j-log4j12 + @@ -993,10 +1001,6 @@ hadoop-common ${hadoop.version} - - org.apache.logging.log4j - log4j-slf4j2-impl - org.apache.logging.log4j log4j-slf4j-impl @@ -1056,6 +1060,10 @@ io.netty netty-all + + org.slf4j + slf4j-reload4j + @@ -1190,6 +1198,12 @@ org.apache.hadoop hadoop-yarn-api ${hadoop.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hadoop @@ -1200,22 +1214,44 @@ org.jline jline + + org.slf4j + slf4j-reload4j + org.apache.hadoop hadoop-yarn-common ${hadoop.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hadoop hadoop-yarn-registry ${hadoop.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hadoop hadoop-yarn-server-web-common ${hadoop.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hadoop @@ -1226,22 +1262,44 @@ io.netty netty-all + + org.slf4j + slf4j-reload4j + org.apache.hbase hbase-common ${hbase.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hbase hbase-client ${hbase.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hbase hbase-hadoop-compat ${hbase.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hbase @@ -1284,6 +1342,10 @@ com.codahale.metrics metrics-core + + org.slf4j + slf4j-reload4j + @@ -1295,12 +1357,22 @@ org.glassfish.web javax.servlet.jsp + + org.slf4j + slf4j-reload4j + org.apache.hbase hbase-mapreduce ${hbase.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hbase @@ -1366,6 +1438,10 @@ io.netty netty + + org.slf4j + slf4j-reload4j + @@ -1381,12 +1457,22 @@ com.sun.jersey jersey-client + + org.slf4j + slf4j-reload4j + org.apache.tez tez-dag ${tez.version} + + + org.slf4j + slf4j-reload4j + + org.apache.tez @@ -1422,12 +1508,22 @@ org.apache.hadoop hadoop-yarn-client + + org.slf4j + slf4j-reload4j + org.apache.tez tez-common ${tez.version} + + + org.slf4j + slf4j-reload4j + + org.apache.tez @@ -1534,12 +1630,6 @@ org.slf4j slf4j-api - - - org.apache.logging.log4j - log4j-slf4j2-impl - - diff --git a/ql/src/main/resources/hive-exec-log4j2.properties b/ql/src/main/resources/hive-exec-log4j2.properties index badcba5288f8..b77b51fabebf 100644 --- a/ql/src/main/resources/hive-exec-log4j2.properties +++ b/ql/src/main/resources/hive-exec-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = HiveExecLog4j2 -monitorInterval = 30 # list of properties property.hive.log.level = INFO diff --git a/ql/src/main/resources/tez-container-log4j2.properties b/ql/src/main/resources/tez-container-log4j2.properties index 1b56a1d35b02..f5a2a4094af3 100644 --- a/ql/src/main/resources/tez-container-log4j2.properties +++ b/ql/src/main/resources/tez-container-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = TezContainerLog4j2 -monitorInterval = 30 # list of properties property.tez.container.log.level = INFO diff --git a/serde/pom.xml b/serde/pom.xml index 54500eb90371..ab045e066073 100644 --- a/serde/pom.xml +++ b/serde/pom.xml @@ -236,6 +236,12 @@ ${mockito-core.version} test + + org.slf4j + slf4j-simple + ${slf4j.version} + test + diff --git a/standalone-metastore/metastore-common/pom.xml b/standalone-metastore/metastore-common/pom.xml index 672aa38e8429..6156320ff765 100644 --- a/standalone-metastore/metastore-common/pom.xml +++ b/standalone-metastore/metastore-common/pom.xml @@ -330,6 +330,12 @@ ${mockito-core.version} test + + org.slf4j + slf4j-simple + ${slf4j.version} + test + diff --git a/standalone-metastore/metastore-server/pom.xml b/standalone-metastore/metastore-server/pom.xml index c36ec7663ae4..76215b0ea28c 100644 --- a/standalone-metastore/metastore-server/pom.xml +++ b/standalone-metastore/metastore-server/pom.xml @@ -63,6 +63,12 @@ org.apache.datasketches datasketches-hive + + + org.slf4j + slf4j-simple + + org.reflections diff --git a/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties b/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties index 010e239ab02b..d4a26538f18c 100644 --- a/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties +++ b/standalone-metastore/metastore-server/src/main/resources/metastore-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = MetastoreLog4j2 -monitorInterval = 30 # list of properties property.metastore.log.level = INFO diff --git a/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml b/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml index 68263b77661b..e67f0a048d8e 100644 --- a/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml +++ b/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml @@ -83,6 +83,10 @@ org.apache.logging.log4j log4j-slf4j2-impl + + org.apache.logging.log4j + log4j-core + org.jetbrains diff --git a/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties b/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties index 7396d9aedaa8..02e9114b4cbe 100644 --- a/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties +++ b/standalone-metastore/packaging/src/docker/conf/metastore-log4j2.properties @@ -15,7 +15,6 @@ # limitations under the License. name = MetastoreLog4j2 -monitorInterval = 30 # list of properties property.hive.log.level = INFO diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index 55f1f11ee5d5..3d218cd7e982 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -320,6 +320,11 @@ log4j-slf4j2-impl ${log4j2.version} + + org.apache.logging.log4j + log4j-core + ${log4j2.version} + org.apache.logging.log4j log4j-1.2-api @@ -392,11 +397,6 @@ slf4j-api ${slf4j.version} - - org.slf4j - slf4j-reload4j - 2.0.13 - org.slf4j jcl-over-slf4j diff --git a/storage-api/pom.xml b/storage-api/pom.xml index 16dccac6f563..5a131dcb01e0 100644 --- a/storage-api/pom.xml +++ b/storage-api/pom.xml @@ -166,6 +166,12 @@ ${junit.vintage.version} test + + org.slf4j + slf4j-simple + ${slf4j.version} + test + ${basedir}/src/java From e1cae0d62d4e8f7d15de1e4b76f0109ac245006c Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Wed, 18 Feb 2026 14:22:19 +0530 Subject: [PATCH 11/14] added slf4j-reload back to standalone-metastore/pom.xml --- standalone-metastore/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index 3d218cd7e982..c32fcf8c3f54 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -552,6 +552,12 @@ keycloak-admin-client ${keycloak.version} + + org.slf4j + slf4j-simple + ${slf4j.version} + test + org.testcontainers mariadb From d6f288389923f9c2702625ad6eb59bb7b4c55f46 Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Mon, 23 Feb 2026 21:18:53 +0530 Subject: [PATCH 12/14] Exclude slf4j-reload4j from Hadoop and Iceberg dependencies to fix metastore init failures --- iceberg/iceberg-catalog/pom.xml | 18 +++++++++ iceberg/iceberg-handler/pom.xml | 18 +++++++++ iceberg/iceberg-shading/pom.xml | 18 +++++++++ iceberg/pom.xml | 40 +++++++++++++++++++ pom.xml | 14 +++++++ standalone-metastore/metastore-common/pom.xml | 8 ++++ standalone-metastore/pom.xml | 10 +++++ 7 files changed, 126 insertions(+) diff --git a/iceberg/iceberg-catalog/pom.xml b/iceberg/iceberg-catalog/pom.xml index 4d1c48b5def9..f87a7554a226 100644 --- a/iceberg/iceberg-catalog/pom.xml +++ b/iceberg/iceberg-catalog/pom.xml @@ -31,6 +31,12 @@ org.apache.hive hive-iceberg-shading + + + org.slf4j + slf4j-reload4j + + org.apache.avro @@ -48,12 +54,24 @@ org.apache.hadoop hadoop-client + + + org.slf4j + slf4j-reload4j + + org.apache.hadoop hadoop-hdfs test + + + org.slf4j + slf4j-reload4j + + org.assertj diff --git a/iceberg/iceberg-handler/pom.xml b/iceberg/iceberg-handler/pom.xml index ef20ab1aab4d..5ab252e19a56 100644 --- a/iceberg/iceberg-handler/pom.xml +++ b/iceberg/iceberg-handler/pom.xml @@ -33,10 +33,22 @@ org.apache.hive hive-iceberg-catalog true + + + org.slf4j + slf4j-reload4j + + org.apache.hadoop hadoop-client + + + org.slf4j + slf4j-reload4j + + org.apache.hive @@ -107,6 +119,12 @@ org.apache.hadoop hadoop-hdfs test + + + org.slf4j + slf4j-reload4j + + org.assertj diff --git a/iceberg/iceberg-shading/pom.xml b/iceberg/iceberg-shading/pom.xml index 17d50dd91d62..315bf6d8e684 100644 --- a/iceberg/iceberg-shading/pom.xml +++ b/iceberg/iceberg-shading/pom.xml @@ -43,16 +43,34 @@ org.apache.iceberg iceberg-data true + + + org.slf4j + slf4j-reload4j + + org.apache.iceberg iceberg-parquet true + + + org.slf4j + slf4j-reload4j + + org.apache.iceberg iceberg-orc true + + + org.slf4j + slf4j-reload4j + + diff --git a/iceberg/pom.xml b/iceberg/pom.xml index 6b83676f65b4..b4facc0d3493 100644 --- a/iceberg/pom.xml +++ b/iceberg/pom.xml @@ -74,26 +74,56 @@ org.apache.iceberg iceberg-api ${iceberg.version} + + + org.slf4j + slf4j-reload4j + + org.apache.iceberg iceberg-core ${iceberg.version} + + + org.slf4j + slf4j-reload4j + + org.apache.iceberg iceberg-data ${iceberg.version} + + + org.slf4j + slf4j-reload4j + + org.apache.iceberg iceberg-parquet ${iceberg.version} + + + org.slf4j + slf4j-reload4j + + org.apache.iceberg iceberg-orc ${iceberg.version} + + + org.slf4j + slf4j-reload4j + + org.apache.hive @@ -159,6 +189,10 @@ org.apache.avro avro + + org.slf4j + slf4j-reload4j + @@ -195,6 +229,12 @@ iceberg-core tests ${iceberg.version} + + + org.slf4j + slf4j-reload4j + + org.assertj diff --git a/pom.xml b/pom.xml index 7ffebc332da0..d2a5146976bb 100644 --- a/pom.xml +++ b/pom.xml @@ -1064,6 +1064,10 @@ org.slf4j slf4j-reload4j + + ch.qos.reload4j + reload4j + @@ -1384,6 +1388,16 @@ org.apache.hadoop hadoop-minicluster ${hadoop.version} + + + org.slf4j + slf4j-reload4j + + + ch.qos.reload4j + reload4j + + org.jamon diff --git a/standalone-metastore/metastore-common/pom.xml b/standalone-metastore/metastore-common/pom.xml index 6156320ff765..504e172fea3c 100644 --- a/standalone-metastore/metastore-common/pom.xml +++ b/standalone-metastore/metastore-common/pom.xml @@ -80,6 +80,14 @@ com.nimbusds nimbus-jose-jwt + + org.slf4j + slf4j-reload4j + + + ch.qos.reload4j + reload4j + diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index c32fcf8c3f54..b30187663969 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -175,6 +175,16 @@ com.github.joshelser dropwizard-metrics-hadoop-metrics2-reporter ${dropwizard-metrics-hadoop-metrics2-reporter.version} + + + org.slf4j + slf4j-reload4j + + + ch.qos.reload4j + reload4j + + com.google.guava From 4e6f9bf43c42dc916c405d15251bfb7a0a4dcab8 Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Tue, 24 Feb 2026 00:08:24 +0530 Subject: [PATCH 13/14] Fix schematool logging startup by forcing classpath-first SLF4J 2.x and materializing a valid Log4j2 properties config from packaged template --- bin/ext/util/execHiveCmd.sh | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/bin/ext/util/execHiveCmd.sh b/bin/ext/util/execHiveCmd.sh index 61b28a653cb9..0c464b9879a1 100644 --- a/bin/ext/util/execHiveCmd.sh +++ b/bin/ext/util/execHiveCmd.sh @@ -45,14 +45,26 @@ execHiveCmd () { # For services that may encounter SLF4J conflicts (schemaTool, schematool, beeline), # filter out old SLF4J 1.x jars from HADOOP_CLASSPATH to prevent binding conflicts if [[ "$SERVICE" =~ ^(schemaTool|schematool|beeline)$ ]]; then - # [FIX]: Check HIVE_HOME/conf FIRST. This ensures we use the built config with the fix. + # [FIX]: Prefer packaged Hive configs first so CI does not depend on host /etc/hive content. if [ -f "${HIVE_HOME}/conf/hive-log4j2.properties" ]; then export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_HOME}/conf/hive-log4j2.properties" - # Only fall back to the system default if the build config is missing + # Packaged dist may only ship the template; materialize a .properties file so Log4j2 + # selects the PropertiesConfiguration parser (it infers parser from filename extension). + elif [ -f "${HIVE_HOME}/conf/hive-log4j2.properties.template" ]; then + HIVE_LOG4J2_DIR="$(mktemp -d -t hive-log4j2.XXXXXX)" + HIVE_LOG4J2_FILE="${HIVE_LOG4J2_DIR}/hive-log4j2.properties" + cp "${HIVE_HOME}/conf/hive-log4j2.properties.template" "${HIVE_LOG4J2_FILE}" + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_LOG4J2_FILE}" + # Only fall back to system default if packaged configs are missing elif [ -f "${HIVE_CONF_DIR}/hive-log4j2.properties" ]; then export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_CONF_DIR}/hive-log4j2.properties" fi + # CRITICAL: Tell Hadoop to load Hive's jars FIRST, overriding globally-installed + # Hadoop/Tez jars that contain old SLF4J 1.x bindings. This prevents the multiple + # SLF4J binding conflict seen in CI environments. + export HADOOP_USER_CLASSPATH_FIRST=true + # Filter HADOOP_CLASSPATH to remove paths with old SLF4J/log4j bindings if [ "$HADOOP_CLASSPATH" != "" ]; then FILTERED_CP="" From 39a15a16f9dcd8793cf10ac0e0f891fe258a9288 Mon Sep 17 00:00:00 2001 From: Hemanth Umashankar Date: Wed, 25 Feb 2026 22:39:41 +0530 Subject: [PATCH 14/14] modified shell scripts and added few exclusions --- bin/ext/util/execHiveCmd.sh | 13 +++-- hcatalog/webhcat/svr/pom.xml | 54 +++++++++++++++++++ itests/qtest-druid/pom.xml | 1 - itests/qtest/pom.xml | 1 - jdbc/pom.xml | 16 ++++++ pom.xml | 53 +++++------------- .../src/main/scripts/ext/schemaTool.sh | 34 ++++++++++++ standalone-metastore/metastore-tools/pom.xml | 8 +-- standalone-metastore/pom.xml | 2 +- 9 files changed, 129 insertions(+), 53 deletions(-) diff --git a/bin/ext/util/execHiveCmd.sh b/bin/ext/util/execHiveCmd.sh index 0c464b9879a1..e59e1a240803 100644 --- a/bin/ext/util/execHiveCmd.sh +++ b/bin/ext/util/execHiveCmd.sh @@ -60,6 +60,10 @@ execHiveCmd () { export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.configurationFile=file://${HIVE_CONF_DIR}/hive-log4j2.properties" fi + # Prevent Log4j2 from being reconfigured after initialization + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.disableShutdownHook=true" + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j.shutdownHookEnabled=false" + # CRITICAL: Tell Hadoop to load Hive's jars FIRST, overriding globally-installed # Hadoop/Tez jars that contain old SLF4J 1.x bindings. This prevents the multiple # SLF4J binding conflict seen in CI environments. @@ -73,11 +77,14 @@ execHiveCmd () { # Skip only specific SLF4J 1.x binding jars by filename if [[ "$(basename "$cp_entry")" == slf4j-log4j12-*.jar || \ "$(basename "$cp_entry")" == slf4j-reload4j-*.jar || \ - "$(basename "$cp_entry")" == log4j-slf4j-impl-*.jar ]]; then + "$(basename "$cp_entry")" == log4j-slf4j-impl-*.jar || \ + "$(basename "$cp_entry")" == reload4j-*.jar ]]; then continue fi - # Skip explicit SLF4J 1.x jar paths - if [[ "$cp_entry" == *slf4j-log4j12* || "$cp_entry" == *slf4j-reload4j* ]]; then + # Skip explicit SLF4J 1.x jar paths and reload4j + if [[ "$cp_entry" == *slf4j-log4j12* || \ + "$cp_entry" == *slf4j-reload4j* || \ + "$cp_entry" == */reload4j-* ]]; then continue fi if [ "$FILTERED_CP" == "" ]; then diff --git a/hcatalog/webhcat/svr/pom.xml b/hcatalog/webhcat/svr/pom.xml index e83d67a6e2eb..1e37fbeb569c 100644 --- a/hcatalog/webhcat/svr/pom.xml +++ b/hcatalog/webhcat/svr/pom.xml @@ -132,6 +132,10 @@ jul-to-slf4j ${slf4j.version} + + org.apache.logging.log4j + log4j-slf4j2-impl + org.apache.hive hive-jdbc @@ -179,6 +183,22 @@ org.eclipse.jetty jetty-util + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-reload4j + + + ch.qos.reload4j + reload4j + + + commons-logging + commons-logging + @@ -193,11 +213,45 @@ org.eclipse.jetty jetty-util + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-reload4j + + + ch.qos.reload4j + reload4j + + + commons-logging + commons-logging + org.apache.hadoop hadoop-mapreduce-client-core + + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-reload4j + + + ch.qos.reload4j + reload4j + + + commons-logging + commons-logging + + javax.ws.rs diff --git a/itests/qtest-druid/pom.xml b/itests/qtest-druid/pom.xml index 5227f9b05e28..65eac9993648 100644 --- a/itests/qtest-druid/pom.xml +++ b/itests/qtest-druid/pom.xml @@ -37,7 +37,6 @@ 16.0.1 4.1.0 4.1.0 - 1.7.30 diff --git a/itests/qtest/pom.xml b/itests/qtest/pom.xml index fdf75bd890bc..48777b5503ac 100644 --- a/itests/qtest/pom.xml +++ b/itests/qtest/pom.xml @@ -32,7 +32,6 @@ false -mkdir -p - 1.7.30 diff --git a/jdbc/pom.xml b/jdbc/pom.xml index 3243d5d66f7f..5522712211a5 100644 --- a/jdbc/pom.xml +++ b/jdbc/pom.xml @@ -154,6 +154,22 @@ commons-beanutils commons-beanutils + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-reload4j + + + ch.qos.reload4j + reload4j + + + commons-logging + commons-logging + true diff --git a/pom.xml b/pom.xml index d2a5146976bb..a5f0e04ff9f7 100644 --- a/pom.xml +++ b/pom.xml @@ -241,17 +241,6 @@ 11.28 - - - central - central - https://repo.maven.apache.org/maven2 - default - - true - warn - - @@ -644,6 +633,18 @@ + + org.apache.kudu + kudu-test-utils + ${kudu.version} + + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.apache.orc orc-core @@ -943,7 +944,7 @@ org.slf4j jcl-over-slf4j - 2.0.13 + ${slf4j.version} xerces @@ -1013,10 +1014,6 @@ org.slf4j slf4j-reload4j - - ch.qos.reload4j - reload4j - commons-logging commons-logging @@ -1064,10 +1061,6 @@ org.slf4j slf4j-reload4j - - ch.qos.reload4j - reload4j - @@ -1083,10 +1076,6 @@ org.slf4j slf4j-reload4j - - ch.qos.reload4j - reload4j - commons-logging commons-logging @@ -1118,10 +1107,6 @@ org.slf4j slf4j-reload4j - - ch.qos.reload4j - reload4j - commons-logging commons-logging @@ -1149,10 +1134,6 @@ org.slf4j slf4j-reload4j - - ch.qos.reload4j - reload4j - org.jline jline @@ -1188,10 +1169,6 @@ org.slf4j slf4j-reload4j - - ch.qos.reload4j - reload4j - commons-logging commons-logging @@ -1393,10 +1370,6 @@ org.slf4j slf4j-reload4j - - ch.qos.reload4j - reload4j - diff --git a/standalone-metastore/metastore-server/src/main/scripts/ext/schemaTool.sh b/standalone-metastore/metastore-server/src/main/scripts/ext/schemaTool.sh index af2cda018fb7..d74d0c46b57e 100644 --- a/standalone-metastore/metastore-server/src/main/scripts/ext/schemaTool.sh +++ b/standalone-metastore/metastore-server/src/main/scripts/ext/schemaTool.sh @@ -26,6 +26,40 @@ schemaTool() { fi JAR=${METASTORE_LIB}/hive-standalone-metastore-server-*.jar + # Prevent Log4j2 from being reconfigured after initialization + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j2.disableShutdownHook=true" + export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j.shutdownHookEnabled=false" + + # CRITICAL: Tell Hadoop to load metastore jars FIRST to prevent SLF4J binding conflicts + export HADOOP_USER_CLASSPATH_FIRST=true + + # Filter HADOOP_CLASSPATH to remove old SLF4J 1.x bindings + if [ "$HADOOP_CLASSPATH" != "" ]; then + FILTERED_CP="" + IFS=':' read -ra CP_ARRAY <<< "$HADOOP_CLASSPATH" + for cp_entry in "${CP_ARRAY[@]}"; do + # Skip SLF4J 1.x binding jars by filename + if [[ "$(basename "$cp_entry")" == slf4j-log4j12-*.jar || \ + "$(basename "$cp_entry")" == slf4j-reload4j-*.jar || \ + "$(basename "$cp_entry")" == log4j-slf4j-impl-*.jar || \ + "$(basename "$cp_entry")" == reload4j-*.jar ]]; then + continue + fi + # Skip explicit SLF4J 1.x jar paths + if [[ "$cp_entry" == *slf4j-log4j12* || \ + "$cp_entry" == *slf4j-reload4j* || \ + "$cp_entry" == */reload4j-* ]]; then + continue + fi + if [ "$FILTERED_CP" == "" ]; then + FILTERED_CP="$cp_entry" + else + FILTERED_CP="${FILTERED_CP}:${cp_entry}" + fi + done + export HADOOP_CLASSPATH="$FILTERED_CP" + fi + # hadoop 20 or newer - skip the aux_jars option and hiveconf exec $HADOOP jar $JAR $CLASS "$@" } diff --git a/standalone-metastore/metastore-tools/pom.xml b/standalone-metastore/metastore-tools/pom.xml index 89c0d8153e32..1cca4b39707a 100644 --- a/standalone-metastore/metastore-tools/pom.xml +++ b/standalone-metastore/metastore-tools/pom.xml @@ -33,7 +33,7 @@ 16.0.2 .. - + @@ -74,12 +74,6 @@ commons-math3 ${commons-math3.version} - - - org.slf4j - slf4j-log4j12 - 1.7.30 - org.jetbrains diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml index b30187663969..923ab946348f 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml @@ -410,7 +410,7 @@ org.slf4j jcl-over-slf4j - 2.0.13 + ${slf4j.version} org.springframework