Bryan Beaudreault created HBASE-26546:
-----------------------------------------
Summary: hbase-shaded-client missing required thirdparty classes
under hadoop 3.3.1
Key: HBASE-26546
URL: https://issues.apache.org/jira/browse/HBASE-26546
Project: HBase
Issue Type: Bug
Reporter: Bryan Beaudreault
In HBASE-25792, the shaded thirdparty libraries from hadoop were removed from
the hbase-shaded-client fat jar to satisfy invariant checks. Unfortunately this
causes users of hbase-shaded-client to fail, because required classes are not
available at runtime.
The specific failure I'm seeing is when trying to call new Configuration(),
which results in:
{code:java}
Caused by: java.lang.NoClassDefFoundError:
org/apache/hadoop/thirdparty/com/google/common/base/Preconditions
at
org.apache.hadoop.conf.Configuration$DeprecationDelta.<init>(Configuration.java:430)
at
org.apache.hadoop.conf.Configuration$DeprecationDelta.<init>(Configuration.java:443)
at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:525){code}
If you take a look at the hbase-shaded-client fat jar, it contains the
org.apache.hadoop.conf.Configuration class as you'd expect. If you decompile
that class (or look at the 3.3.1 source), you'll see that there is an import
for org.apache.hadoop.thirdparty.com.google.common.base.Preconditions but the
fat jar does not provide it.
One way for clients to get around this is to add an explicit dependency on
hadoop-shaded-guava, but this is problematic for a few reasons:
- it's best practice to use maven-dependency-plugin to disallow declared,
unused dependencies (which this would be)
- it requires users to continually keep the version of hadoop-shaded-guava
up-to-date over time.
- it only covers guava, but there is also protobuf and potentially other shaded
libraries in the future.
I think we should remove the exclusion of {{org/apache/hadoop/thirdparty/**/*}}
from the shading config and instead add that pattern to the allowlist so that
hbase-shaded-client is all clients need to get started with hbase.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)