Не найдено: org.apache.hadoop.security.authentication.util.KerberosUtil - PullRequest
0 голосов
/ 05 июля 2018

Я запускаю штормовую банку в кластере, где я настроил hadoop, kafka, штормовую группу

когда я запускаю 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

Нажмите здесь, чтобы посмотреть файл POM

После некоторого поиска в Google я обнаружил, что мы добавили hadoop auth jar.even после того, как обнаружил ту же ошибку

1 Ответ

0 голосов
/ 06 июля 2018

Я думаю, вы упаковываете старую баночку Hadoop.

Взгляните на POM-шторм-hdfs https://github.com/apache/storm/blob/v1.0.6/external/storm-hdfs/pom.xml. Когда вы используете плагин Shade, в конечном итоге в банке будут все ваши зависимости, в том числе переходные, введенные через прямые зависимости. Storm-hdfs объявляет зависимость от списка Jar-файлов Hadoop. Вы должны убедиться, что вы объявляете тот же список файлов Jad Hadoop в своем POM, если хотите использовать версию Hadoop, отличную от версии по умолчанию.

В частности, происходит то, что вы не объявили hadoop-auth в своем POM, поэтому ваше POM поставляется с версией jar по умолчанию (2.6.1). Поскольку эта версия hadoop-auth несовместима с другими jar-файлами Hadoop (2.9.1), вы получаете исключение во время выполнения.

Вы должны либо исключить все jar-файлы Hadoop из вашего импорта storm-hdfs, а затем поместить jar-файлы, которые вы хотите использовать, в директорию lib Storm, или добавить нужные версии jar-файлов Hadoop в свой список зависимостей в POM.

Edit: Я думаю, что нашел вашу проблему. Вы не указали область действия штормового ядра. Поскольку storm-core зависит от hadoop-auth, а вы явно не объявили его, Maven попытается угадать, какая версия hadoop-auth вам нужна, исходя из того, где в дереве появляется зависимость. Поскольку hadoop-auth отображается как 2.9.1 через некоторые из ваших зависимостей Hadoop, а 2.6.1 - через storm-core, вы получаете 2.6.1, помещенный в ваш jar.

Если вы хотите избежать подобных вещей в будущем, вам следует использовать блок Maven's dependencyManagement https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management.

т.е. Вы должны добавить что-то вроде следующего в свой pom, а затем удалить исключения из банок hadoop.

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