java - 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 上运行。可以相关吗?
解决方案
在执行了几个步骤后,我能够克服这个问题:
在这篇文章之后,我下载了 的文件
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>
一些对我有帮助的网址:
推荐阅读
- amazon-web-services - 如何在 AWS CLI 过滤器中使用正则表达式
- javascript - SyntaxError: Unexpected token { 当试图在 es5 模块中导出一个类以在另一个模块中使用时
- c - 如何集成前缀检查器以根据文件读取查找完整的单词
- php - 如果不重定向到 https,则使用 https
- java - 立即在 Android 应用中禁用 NFC 的 API
- python-3.x - 仅当匹配时,如何合并两个数据框并从新列中的另一列返回数据?
- node.js - 使用 Node.js 访问 NTLM Api
- angular - 如何启用选中 Mat 表中的单个复选框的按钮?
- julia - 从 Julia 的字典中创建一个矩阵,其中的键是我必须拆分的字符串
- c# - 使用表达式主体成员可以提高一些性能?