diff --git a/bin/hbase b/bin/hbase
index c562ad8fb3dd..8f58bf578a55 100755
--- a/bin/hbase
+++ b/bin/hbase
@@ -221,6 +221,14 @@ if [ "$HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP" != "true" ] ; then
HADOOP_IN_PATH=$(PATH="${HADOOP_HOME:-${HADOOP_PREFIX}}/bin:$PATH" which hadoop 2>/dev/null)
fi
+#If Hadoop is not specified with HADOOP_HOME, check that the assembly includes Hadoop
+if [[ -z "${HADOOP_IN_PATH}" && ! -e "lib/hadoop-common*" ]] ; then
+ echo Installation does not contain Hadoop, and HADOOP_HOME does not point to a Hadoop installation.
+ echo Specify a compatible Hadoop installation via HADOOP_HOME, or use the HBase assembly variant
+ echo that includes Hadoop.
+ exit 1
+fi
+
# Add libs to CLASSPATH
declare shaded_jar
diff --git a/hbase-assembly-byo-hadoop/pom.xml b/hbase-assembly-byo-hadoop/pom.xml
new file mode 100644
index 000000000000..30fd102ff45c
--- /dev/null
+++ b/hbase-assembly-byo-hadoop/pom.xml
@@ -0,0 +1,439 @@
+
+
+
+ 4.0.0
+
+ org.apache.hbase
+ hbase-build-configuration
+ ${revision}
+ ../hbase-build-configuration
+
+ hbase-assembly-byo-hadoop
+ pom
+ Apache HBase - Assembly without Hadoop and its transitive dependencies
+ Module that does project assembly without Hadoop and its transitive dependencies and that is all that it does.
+
+ true
+
+ true
+
+
+
+
+
+
+
+ org.apache.hadoop
+ hadoop-yarn-api
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-yarn-client
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-yarn-common
+ ${hadoop-three.version}
+ provided
+
+
+ com.fasterxml.jackson.module
+ jackson-module-jaxb-annotations
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+
+
+ org.apache.hadoop
+ hadoop-mapreduce-client-core
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-mapreduce-client-jobclient
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-hdfs
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-auth
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-common
+ ${hadoop-three.version}
+ provided
+
+
+ org.checkerframework
+ checker-qual
+
+
+
+
+ org.apache.hadoop
+ hadoop-client
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-annotations
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-distcp
+ ${hadoop-three.version}
+ provided
+
+
+ org.apache.hadoop
+ hadoop-hdfs-client
+ ${hadoop-three.version}
+ provided
+
+
+
+
+ org.apache.hbase
+ hbase-shaded-client-byo-hadoop
+
+
+ org.apache.hbase
+ hbase-shaded-mapreduce
+
+
+
+ org.apache.hbase
+ hbase-openssl
+
+
+ org.apache.hbase
+ hbase-server
+
+
+ org.apache.hbase
+ hbase-endpoint
+
+
+ org.apache.hbase
+ hbase-mapreduce
+
+
+ org.apache.hbase
+ hbase-hadoop-compat
+
+
+ com.google.guava
+ guava
+
+
+
+
+ org.apache.hbase
+ hbase-shell
+
+
+ org.apache.hbase
+ hbase-thrift
+
+
+ org.apache.hbase
+ hbase-rest
+
+
+ org.apache.hbase
+ hbase-external-blockcache
+
+
+ org.apache.hbase
+ hbase-metrics-api
+
+
+ org.apache.hbase
+ hbase-metrics
+
+
+ org.apache.hbase
+ hbase-protocol-shaded
+
+
+ org.apache.hbase
+ hbase-resource-bundle
+ true
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+ org.apache.httpcomponents
+ httpcore
+
+
+ org.apache.hbase
+ hbase-asyncfs
+
+
+ org.apache.hbase
+ hbase-backup
+
+
+ org.apache.hbase
+ hbase-balancer
+
+
+ org.apache.hbase
+ hbase-replication
+
+
+ org.apache.hbase
+ hbase-http
+
+
+ org.apache.hbase
+ hbase-zookeeper
+
+
+ org.apache.hbase
+ hbase-hbtop
+
+
+
+ org.apache.hbase
+ hbase-shaded-client
+
+
+
+
+ org.apache.hbase
+ hbase-compression-aircompressor
+
+
+ org.apache.hbase
+ hbase-compression-brotli
+
+
+ org.apache.hbase
+ hbase-compression-lz4
+
+
+ org.apache.hbase
+ hbase-compression-snappy
+
+
+ org.apache.hbase
+ hbase-compression-zstd
+
+
+ org.apache.hbase
+ hbase-diagnostics
+
+
+ jline
+ jline
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+
+
+ org.slf4j
+ jul-to-slf4j
+
+
+ org.apache.logging.log4j
+ log4j-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+
+
+ org.apache.logging.log4j
+ log4j-1.2-api
+
+
+
+ io.opentelemetry.javaagent
+ opentelemetry-javaagent
+
+
+
+ net.spy
+ spymemcached
+
+
+
+ org.apache.tomcat
+ tomcat-juli
+ ${tomcat.version.for.exclusion}
+ provided
+
+
+ org.apache.tomcat
+ tomcat-api
+ ${tomcat.version.for.exclusion}
+ provided
+
+
+ org.apache.tomcat
+ tomcat-util-scan
+ ${tomcat.version.for.exclusion}
+ provided
+
+
+ org.apache.tomcat
+ tomcat-util
+ ${tomcat.version.for.exclusion}
+ provided
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-remote-resources-plugin
+
+
+ aggregate-licenses
+
+ process
+
+
+
+ ${build.year}
+ ${license.debug.print.included}
+ ${license.bundles.dependencies}
+ ${license.bundles.jquery}
+ ${license.bundles.vega}
+ ${license.bundles.logo}
+ ${license.bundles.bootstrap}
+
+
+ ${project.groupId}:hbase-resource-bundle:${project.version}
+
+
+ ${project.groupId}:hbase-resource-bundle:${project.version}
+
+
+ supplemental-models.xml
+
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ hbase-byo-hadoop-${project.version}
+ false
+ true
+ posix
+
+ ${assembly.file}
+
+
+
+
+ maven-dependency-plugin
+
+
+
+
+ unpack-dependency-notices
+
+ unpack-dependencies
+
+ prepare-package
+
+ pom
+ true
+ **\/NOTICE,**\/NOTICE.txt
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ ${exec.maven.version}
+
+
+ concat-NOTICE-files
+
+ exec
+
+ package
+
+ env
+
+ bash
+ -c
+ cat maven-shared-archive-resources/META-INF/NOTICE \
+ `find ${project.build.directory}/dependency -iname NOTICE -or -iname NOTICE.txt`
+
+ ${project.build.directory}/NOTICE.aggregate
+ ${project.build.directory}
+
+
+
+
+
+
+
+
diff --git a/hbase-assembly-byo-hadoop/src/main/assembly/components.xml b/hbase-assembly-byo-hadoop/src/main/assembly/components.xml
new file mode 100644
index 000000000000..f79b2e754caf
--- /dev/null
+++ b/hbase-assembly-byo-hadoop/src/main/assembly/components.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+ ${project.basedir}/../target/site
+ docs
+
+
+ **/*devapidocs/**
+
+
+
+
+ ${project.basedir}/..
+ .
+
+ CHANGES.md
+ RELEASENOTES.md
+ README.txt
+
+ 0644
+
+
+
+ ${project.basedir}/../conf
+ conf
+ 0644
+ 0755
+
+
+
+
+ ${project.basedir}/../bin
+ bin
+
+ **/*.cmd
+
+ 0755
+ 0755
+
+
+
+ ${project.basedir}/../bin
+ bin
+
+ **/*.cmd
+
+
+
+
+ ${project.basedir}/../hbase-server/target/hbase-webapps
+ hbase-webapps
+ 0644
+ 0755
+
+
+ ${project.basedir}/../hbase-thrift/target/hbase-webapps
+ hbase-webapps/
+ 0644
+ 0755
+
+
+ ${project.basedir}/../hbase-rest/target/hbase-webapps
+ hbase-webapps/
+ 0644
+ 0755
+
+
+
+ ${project.basedir}/../hbase-server/target/native
+ lib/native
+ 0755
+ 0755
+
+ *.so
+ *.dylib
+
+
+
+
+ ${project.basedir}/../hbase-common/target/generated-sources/native
+ include
+ 0644
+ 0755
+
+ **/*.h
+
+
+
+
diff --git a/hbase-assembly-byo-hadoop/src/main/assembly/hadoop-three-compat.xml b/hbase-assembly-byo-hadoop/src/main/assembly/hadoop-three-compat.xml
new file mode 100644
index 000000000000..794d1db85177
--- /dev/null
+++ b/hbase-assembly-byo-hadoop/src/main/assembly/hadoop-three-compat.xml
@@ -0,0 +1,158 @@
+
+
+
+
+
+ bin
+
+ tar.gz
+
+
+ src/main/assembly/components.xml
+
+
+
+
+ ${project.build.directory}/maven-shared-archive-resources/META-INF/LICENSE
+ .
+ LICENSE.txt
+ unix
+
+
+ ${project.build.directory}/NOTICE.aggregate
+ .
+ NOTICE.txt
+ unix
+
+
+ ${basedir}/src/main/resources/META-INF/LEGAL
+ .
+ LEGAL
+ unix
+
+
+
+
+
+ lib
+ true
+
+
+
+ org.apache.hbase:hbase-shaded-mapreduce
+ org.apache.hbase:hbase-shaded-client-byo-hadoop
+
+ org.jruby:jruby-complete
+
+ com.github.stephenc.findbugs:findbugs-annotations
+ commons-logging:commons-logging
+ log4j:log4j
+ org.apache.htrace:htrace-core4
+ org.apache.htrace:htrace-core
+ org.apache.yetus:audience-annotations
+ org.slf4j:*
+ org.apache.logging.log4j:*
+ io.opentelemetry:*
+
+ io.opentelemetry.javaagent:*
+
+ jline:jline
+
+
+ com.sun.jersey:*
+ com.sun.jersey.contribs:*
+
+ com.sun.xml.ws:jaxws-ri:pom
+
+
+
+
+ lib/ruby
+
+ org.jruby:jruby-complete
+
+
+
+
+ lib/client-facing-thirdparty
+ true
+
+
+
+ com.github.stephenc.findbugs:findbugs-annotations
+ commons-logging:commons-logging
+ log4j:log4j
+ org.apache.htrace:htrace-core4
+ org.apache.htrace:htrace-core
+ org.apache.yetus:audience-annotations
+ org.slf4j:*
+ org.apache.logging.log4j:*
+ io.opentelemetry:*
+
+
+
+ lib/shaded-clients
+
+ org.apache.hbase:hbase-shaded-mapreduce
+ org.apache.hbase:hbase-shaded-client-byo-hadoop
+
+
+
+ lib/zkcli
+
+
+ jline:jline
+
+
+
+ lib/trace
+
+ io.opentelemetry.javaagent:*
+
+
+
+
diff --git a/hbase-assembly-byo-hadoop/src/main/resources/META-INF/LEGAL b/hbase-assembly-byo-hadoop/src/main/resources/META-INF/LEGAL
new file mode 100644
index 000000000000..9ac7f5a78b15
--- /dev/null
+++ b/hbase-assembly-byo-hadoop/src/main/resources/META-INF/LEGAL
@@ -0,0 +1,5 @@
+In Ruby's source distribution, this would describe a number of C source files
+that have different licenses than Ruby itself. None of those apply to JRuby,
+so we have this file here as a placeholder.
+
+For details of licensing of this collective work, see LICENSE
diff --git a/hbase-assembly/pom.xml b/hbase-assembly/pom.xml
index c9db9a9ddee5..4631d365172b 100644
--- a/hbase-assembly/pom.xml
+++ b/hbase-assembly/pom.xml
@@ -47,6 +47,7 @@
org.apache.hbase
hbase-shaded-mapreduce
+
org.apache.hbase
hbase-openssl
diff --git a/pom.xml b/pom.xml
index ac514d539387..3ceb1c3b0719 100644
--- a/pom.xml
+++ b/pom.xml
@@ -738,6 +738,7 @@
hbase-it
hbase-examples
hbase-assembly
+ hbase-assembly-byo-hadoop
hbase-testing-util
hbase-annotations
hbase-rest
@@ -1027,6 +1028,11 @@
is what glassfish's jspC jar uses and that's where we get our own need for a jsp-api.
-->
+
+ org.apache.hbase
+ hbase-annotations
+ ${project.version}
+
org.apache.hbase
hbase-annotations