You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Bryan Beaudreault (Jira)" <ji...@apache.org> on 2021/12/07 17:45:00 UTC

[jira] [Created] (HBASE-26546) hbase-shaded-client missing required thirdparty classes under hadoop 3.3.1

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)