hadoop - 未找到:org.apache.hadoop.security.authentication.util.KerberosUtil
问题描述
我在集群中运行storm jar,在那里我配置了hadoop、kafka、storm集群
当我在本地模式下运行 jar 时它工作正常,当我在风暴集群上运行它时,我在 Storm UI 中发现相应的错误:
java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosTicket(Ljavax/security/auth/Subject;)Z at
org.apache.hadoop.security.UserGroupInformation.<init>(UserGroupInformation.java:666) at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:861) at
org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:820)
pom.xml
经过一些谷歌我发现我发现我们已经添加了 hadoop auth jar.even 在我发现同样的错误之后
解决方案
我认为您正在打包一个旧的 Hadoop jar。
看看storm-hdfs POM https://github.com/apache/storm/blob/v1.0.6/external/storm-hdfs/pom.xml。当您使用 Shade 插件时,您最终得到的 jar 将包含您的所有依赖项,包括通过直接依赖项引入的传递性依赖项。Storm-hdfs 声明了对 Hadoop jar 列表的依赖关系。如果要使用与默认版本不同的 Hadoop,则需要确保在 POM 中声明相同的 Hadoop jar 列表。
具体来说,您没有在 POM 中声明 hadoop-auth,因此您的 POM 会使用该 jar 的默认版本(2.6.1)打包。由于该版本的 hadoop-auth 与其他 Hadoop jar(即 2.9.1)不兼容,因此在运行时会出现异常。
您应该从导入的storm-hdfs 中排除所有Hadoop jar,然后将要使用的jar 放在Storm 的lib 目录中,或者将正确版本的Hadoop jar 添加到POM 中的依赖项列表中。
编辑:我想我发现了你的问题。您尚未将风暴核心的范围设置为提供。由于storm-core 依赖于hadoop-auth,并且你没有明确声明它,Maven 将尝试根据依赖项在树中出现的位置来猜测你需要哪个版本的hadoop-auth。由于 hadoop-auth 通过您的一些 Hadoop 依赖项显示为 2.9.1,但通过storm-core 显示为 2.6.1,您碰巧将 2.6.1 放入您的 jar 中。
如果你以后想避免这种事情,你应该使用 Maven 的 dependencyManagement 块https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management。
即您应该在您的 pom 中添加类似以下内容,然后删除 hadoop jar 的排除项。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
推荐阅读
- python-3.x - 使用 YahooDailyReader 检索 AMZN 股票数据
- vuejs2 - VueJS:子 - 父组件更新
- javascript - 在 Razor 的 JavaScript 函数中编写 c# 代码
- javascript - Bootstrap 多选 - 每组不选或最多选一个
- docker - Docker 和 Letsencrypt 证书再次出现 Keycloak 错误
- html - 移动问题上的 CSS 主题渐变背景
- sql - 如何格式化sql * plus中的整数?
- android -
我正在尝试在其他布局中重新使用带有按钮的布局,但我希望按钮的布局对于包含的每个不同布局都有不同的点击侦听器。任何想法?
第一个布局
<data> <variable name="model" type="co
- c++ - 在 CLion IDE 中运行但不在 Leetcode.com 上的 C++ 代码
- haskell - 在 Num 等类的实例之间移动