HBase 客户端 - java.lang.ClassNotFoundException:org.apache.hadoop.crypto.key.KeyProviderTokenIssuer

HBase client - 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>

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

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

所以我在 Google 中寻找 KeyProviderTokenIssuer 的 class,但没有找到它的来源。

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

中没有看到这样的包

这里是否有一些库不匹配?

我运行正在 Windows。会不会有关系?

我在执行了几个步骤后解决了这个问题:

  • this post之后,我下载了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 相关的依赖项都在该版本中。

  • I 运行 mvn dependency:tree 发现其中一个依赖项 jar 带来了 org.apache.hadoop:hadoop-hdfs-client:jar:3.2.0 的 jar,所以我将它排除在依赖项之外:

    <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>
    

一些对我有帮助的网址: