首页 > 解决方案 > HBase 客户端 - java.lang.ClassNotFoundException: org.apache.hadoop.crypto.key.KeyProviderTokenIssuer

问题描述

我正在尝试运行一个连接到 HBase 的遗留项目。

它具有(在其他依赖项中):

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>1.2.0-cdh5.7.2</version>
    </dependency>

当应用程序启动并createConnection在类的方法中到达此代码时org.apache.hadoop.hbase.client.ConnectionFactory

try{
    .... 
    return (Connection) constructor.newInstance(conf, managed, pool, user);
} catch (Exception e) {
  throw new IOException(e);
}

抛出并捕获了一个异常,说:

java.lang.NoClassDefFoundError: org/apache/hadoop/crypto/key/KeyProviderTokenIssuer

所以我在谷歌中寻找这个类,KeyProviderTokenIssuer但没有找到它应该来自哪里。

为什么系统试图使用这个类,我应该从哪里得到它?Crypto包不是hbase-client依赖项的一部分,我在https://mvnrepository.com/中看不到

这里是否可能存在一些库不匹配?

我在 Windows 上运行。可以相关吗?

标签: javareflectionhbasehbase-client

解决方案


在执行了几个步骤后,我能够克服这个问题:

  • 这篇文章之后,我下载了 的文件hadoop-common-2.2.0-bin-master.zip并将其完全解压缩到 的文件夹中C:\Program Files\apache\hadoop\bin

  • 我将HADOOP_HOME参数添加到系统变量中,将其指向C:\Program Files\apache\hadoop

  • 我在PATH变量中添加了%HADOOP_HOME%\bin

  • 由于我的 Hadoop 是 2.6.0 版,我检查并确保所有与 Hadoop 相关的依赖项都在该版本中。

  • 我运行mvn dependency:tree并发现其中一个依赖项 jar 带有它的 jar,org.apache.hadoop:hadoop-hdfs-client:jar:3.2.0因此我将其从依赖项中排除:

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>bla</artifactId>
        <version>1.0.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

一些对我有帮助的网址:


推荐阅读