未找到:org.apache.hadoop.security.authentication.util.kerberosutil

thtygnil  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(578)

我在集群中运行stormjar,在集群中我配置了hadoop、kafka和storm集群
当我在本地模式下运行jar时,它工作正常,当我在storm集群上运行它时,我在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文件
单击此处查看pom文件
经过一些谷歌我发现我发现我们添加了hadoop认证jar。即使在我发现同样的错误

oiopk7p5

oiopk7p51#

我觉得你在 Package 一个旧的hadoop jar。
看看风暴hdfs pomhttps://github.com/apache/storm/blob/v1.0.6/external/storm-hdfs/pom.xml. 使用shade插件时,最终得到的jar将包含所有依赖项,包括通过直接依赖项引入的可传递依赖项。StormHDFS声明了对HadoopJAR列表的依赖关系。如果希望使用不同于默认版本的hadoop,则需要确保在pom中声明相同的hadoopjar列表。
具体来说,您还没有在pom中声明hadoop auth,因此pom将使用该jar的默认版本(2.6.1)打包。由于该版本的hadoopauth与其他hadoopjar(2.9.1)不兼容,因此在运行时会出现异常。
您应该从导入的storm hdfs中排除所有hadoop jar,然后将要使用的jar放在storm的lib目录中,或者将正确版本的hadoop jar添加到pom的依赖项列表中。
编辑:我想我找到你的问题了。您尚未将storm core的范围设置为“提供”。由于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.
i、 e.您应该在pom中添加如下内容,然后删除hadoopjar的排除项。

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

相关问题