2015-07-15 4 views
4

В проекте J2EE мы используем Wildfly для развертывания проекта. Мы запускаем hadoop на внешнем сервере. Мы хотим подключить этот сервер и прочитать данные HDFS. Но проблема в том, что любая используемая нами библиотека hadoop (hasoop-common, hadoop-hdfs, hasoop-client) нуждается в Джерси, но Wildfly использует Resteasy. Из-за этого конфликта Wildfly не развертывается успешно.Hadoop Jersey конфликтует с Wildfly resteasy

Мой вопрос,

Есть ли Hadoop библиотека, которая не зависит от Джерси, мы можем использовать для этой операции, или,

мы должны заменить Resteasy на Wildfly с Джерси делать. Если это решение, как мы можем это сделать. Мы не смогли найти источник этого решения.

Спасибо за помощь.

+0

Возможно, вы имеете в виду [Jersey] (https://jersey.java.net), а не Jetty? –

+0

Да, извините за опечатку, сейчас я отредактирую вопрос. – xxlali

+0

[hadoop-client 2.7.1] (https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-client/2.7.1/hadoop-client-2.7.1.pom), как представляется, исключает Джерси. Вы уверены в том, где находятся зависимости? –

ответ

0

ОК, я получил базовый материал Hadoop HDFS в версии 2.7.1, работающий в WildFly 9.0.1. Подробности можно найти в моем блоге: http://rick-rainer-ludwig.com/2015/09/01/hadoop-client-in-wildfly-a-difficult-marriage

Основные шаги:

  • Выключить неявной поддержки архива боб и заставить все файлы JAR, чтобы содержать META-INF/beans.xml если CDI бобы включены , Некоторые зависимости клиента Hadoop содержат @Inject, которые приводят к сбою WildFly во время развертывания.
  • Добавьте дополнительные зависимости для jersey-server и jersey-json, чтобы привести проект в состояние, в котором он может скомпилироваться. Клиентская зависимость Hadoop не является самостоятельной. Таким образом, дополнительные зависимости необходимы для добавления некоторых отсутствующих классов.
  • Исключить hasoop-mapreduce-client-app и hasoop-mapreduce-client-jobclient, потому что они пытаются предоставить службу, которая не может запускаться из-за отсутствующих зависимостей в WildFly. Не идея, для чего они и почему они упакованы.
  • Если вы полагаетесь на Jackson 2, вам нужно упаковать весь клиент Hadoop в собственный EAR, потому что клиент Hadoop использует Jackson 1 через упакованный поставщик. EAR должен предоставить прокси с хорошо определенным интерфейсом, например, службой REST или EJB с удаленным интерфейсом.
+0

Благодарим вас за ответ. не могу вернуться с этого момента, но я надеюсь, что это поможет другим людям. – xxlali

+0

Добро пожаловать. В конце концов, это не так уж и отличается от вашего решения. Вам нужно изолировать клиента Hadoop от части JavaEE. JavaSE, я делаю это с другим EAR. Надеемся, что в будущем эта упаковка будет очищена. –