java.lang.NoSuchFieldError: IBM_JAVA

Я вижу много ссылок на этот вопрос, и я следил за ними в здесь

Я использую Hadoop 2.4.1 и Flume 1.5.0.1. Моя конфигурация flume-env.sh выглядит следующим образом:

FLUME_CLASSPATH="/var/lib/apache-flume-ng:lib/hadoop-core-1.2.0.jar:lib/hadoop-auth-2.4.1.jar:lib/hadoop-yarn-api-2.4.1.jar:lib/hadoop-mapreduce-client-jobclient-2.4.1.jar:lib/hadoop-mapreduce-client-core-2.4.1.jar:lib/hadoop-common-2.4.1.jar:lib/hadoop-annotations-2.4.1.jar"

с этими jar-файлами я добавил еще один jar-файл commons-configuration-1.6.jar, доступный в библиотеке Flume. Я новичок в Flume и Hadoop.

Полная трассировка выглядит следующим образом:

ERROR [conf-file-poller-0] (org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run:149)  - Unhandled error
java.lang.NoSuchFieldError: IBM_JAVA
    at org.apache.hadoop.security.UserGroupInformation.getOSLoginModuleName(UserGroupInformation.java:337)
    at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:382)
    at org.apache.flume.sink.hdfs.HDFSEventSink.authenticate(HDFSEventSink.java:553)
    at org.apache.flume.sink.hdfs.HDFSEventSink.configure(HDFSEventSink.java:272)
    at org.apache.flume.conf.Configurables.configure(Configurables.java:41)
    at org.apache.flume.node.AbstractConfigurationProvider.loadSinks(AbstractConfigurationProvider.java:418)
    at org.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:103)
    at org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:140)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

person Raghuveer    schedule 10.10.2014    source источник


Ответы (2)


Проблема вызвана отсутствием или конфликтом зависимостей:

  1. Добавьте hadoop-auth в путь к классам
  2. Если проблема все еще возникает, удалите hadoop-core из пути к классам. Он конфликтует с hadoop-auth.

Это решит проблему.

person JayL    schedule 29.07.2015
comment
да, это решило мою проблему. Мне пришлось добавить hadoop-auth и удалить hadoop-core. - person edge; 25.12.2016

Наконец я нашел ответ на это.

  1. Скопируйте класс PlatformName из hadoop-auth и скомпилируйте его локально.

    пакет org.apache.hadoop.util;

    открытый класс PlatformName {

        private static final String platformName = System.getProperty("os.name") + "-" + System.getProperty("os.arch") + "-" + System.getProperty("sun.arch.data.model");
    
        public static final String JAVA_VENDOR_NAME = System.getProperty("java.vendor");
    
        public static final boolean IBM_JAVA = JAVA_VENDOR_NAME.contains("IBM");
    
        public static String getPlatformName() {
            return platformName;
        }
    
        public static void main(String[] args) {
            System.out.println(platformName);
        }
    }
    
  2. Скопируйте и вставьте файл класса в ваш файл hadoop-core. Вы должны быть на ногах.

Спасибо всем

person Raghuveer    schedule 13.10.2014
comment
Решение состоит в том, чтобы добавить все файлы jar, найденные в $HADOOP_HOME/share/все библиотеки. При этом вам вообще не нужно добавлять какой-либо пользовательский код. - person Raghuveer; 13.10.2014