Apache Hadoop setXIncludeAware UnsupportedOperationException

Я пытаюсь запустить Apache Hadoop 1.21, но получаю следующее исключение:

Failed to set setXIncludeAware(true) for parser org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@2662e5cf:java.lang.UnsupportedOperationException

полная трассировка стека:

13/10/17 17:22:52 ERROR conf.Configuration: Failed to set setXIncludeAware(true) for parser org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@2662e5cf:java.lang.UnsupportedOperationException:  setXIncludeAware is not supported on this JAXP implementation or earlier: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
java.lang.UnsupportedOperationException:  setXIncludeAware is not supported on this JAXP implementation or earlier: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
    at javax.xml.parsers.DocumentBuilderFactory.setXIncludeAware(DocumentBuilderFactory.java:589)
    at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:1131)
    at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:1107)
    at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:1053)
    at org.apache.hadoop.conf.Configuration.get(Configuration.java:460)
    at org.apache.hadoop.fs.FileSystem.getDefaultUri(FileSystem.java:132)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:124)
    at main.JobExecutor.executeModelCreation(JobExecutor.java:223)
    at main.JobExecutor.main(JobExecutor.java:256)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:160)

Я искал решение почти 3 дня, я нашел несколько веб-сайтов (например, этот: Hadoop «Не удалось установить setXIncludeAware(true) для синтаксического анализатора» ошибка и как ее устранить), который предложил добавить xerces и xalan в зависимости от maven. Были и другие веб-сайты, которые предлагали противоположное - удалить все ссылки xerces из пути к классам. Но ни одно из предложенных решений не работает :(

Я также пытался поставить:

System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); 

к моему коду. Но и это не помогло :(

Я использую Apache Hadoop 1.21, как я уже сказал, и JDK 1.7.0-17.


person Klinki    schedule 17.10.2013    source источник
comment
ты решил эту проблему? Будет здорово, если вы опубликуете свое решение. Я попытался добавить зависимости, как описано в ссылке выше, но это не решило проблему.   -  person bachr    schedule 26.06.2014


Ответы (2)


В моем случае это была устаревшая зависимость компонента Maven от xerces-impl 2.4.0 (из-за того, что mockrunner 1.0.3 использовался на этапе тестирования). Помогла следующая управляемая зависимость, добавленная в раздел <dependencyManagemen>.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.11.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>

Версия Hadoop была 2.3.0. Здесь это другая статья, в которой описывается похожая ситуация.

person Roman Nikitchenko    schedule 05.08.2014
comment
‹Управление зависимостями› помогло мне. Спасибо. - person Viacheslav Dobromyslov; 16.09.2014

Попробуйте передать -Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

в качестве командного аргумента. Может быть, вы недостаточно рано устанавливаете свойство?

person Max Bileschi    schedule 03.12.2013