HiveUDF + saxon 9.1.0.8 + Java8 = не удалось создать XPathFactory

Моя работа Spark с HiveContext и Saxon работает нормально, если в коде не определены UDF. В случае реализации UDF - инициализация HiveContext завершилась ошибкой. Я слышал, что в saxon 9.5.1.5 решена проблема с несовместимостью saxon \ java8, которая еще не выпущена как бесплатная версия в центральном хранилище maven:

Причина: java.lang.RuntimeException: XPathFactory#newInstance() не удалось создать XPathFactory для объектной модели по умолчанию: http://java.sun.com/jaxp/xpath/dom с XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: файл jar:file:/JBOD_D19/hadoop/cdh/yarn/nm/usercache/u23120d1/appcache/application_1477.001_01_01_01_01_01_01_01_8_8_1_01_8_01_1_01_7_1010751 0805991 080599075175175175175175175175175175175575575875!/META-INF/services/javax.xml.xpath.XPathFactory:2: недопустимый синтаксис файла конфигурации в javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:102) в org.apache.hadoop.hive.ql.udf.xml.UDFXPathUtil.(UDFXPathUtil.java:41) в org.apache.hadoop.hive.ql.udf.xml.GenericUDFXPath.(GenericUDFXPath.java:53)

1 ответ

Решение

Правильно, использование метода XPathFactory.newInstance() из Java8 со старым выпуском Saxon на пути к классам приведет к этой ошибке. Так что используйте более новую версию Saxon. Текущая версия - 9.7.0.11.

Последние выпуски Saxon можно найти в Maven. В течение многих лет мы не разрешали помещать Saxon в Maven, поскольку загрузка из Maven не удовлетворяет условию, требуемому для некоторых сторонних программных компонентов, которые мы используем, то есть вы не должны распространять файлы JAR, не распространяя при этом юридические условия. В конечном итоге мы уступили из-за огромного спроса, несмотря на то, что распространение через Maven все еще нарушает это условие. Организации, которые заботятся об этих вещах, не должны использовать Maven.

Другие вопросы по тегам