2013-10-01 4 views
2

Я пытаюсь разработать веб-приложение, которое берет данные через отдых и вставляет те же данные в hbase, используя phoenix. Я попытался развернуть свое приложение на tomcat, и он отлично работает. Но выдает следующее исключение для выполнения во время развертывания на jboss.Проблемы при развертывании войны приложений с phoenix-клиентом в jboss

Вызванный: java.lang.RuntimeException: HBase-default.xml файл, кажется, для и старая версия HBase (нуль), эта версия 0.94.7 в org.apache.hadoop.hbase.HBaseConfiguration .checkDefaultsVersion (HBaseConfiguration.java:68) на org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources (HBaseConfiguration.java:100) на org.apache.hadoop.hbase.HBaseConfiguration.create (HBaseConfiguration.java:111) at com.salesforce.phoenix.query.ConfigurationFactory $ ConfigurationFactoryImpl.getConfiguration (ConfigurationFactory.java:51) at com.salesforce.phoenix.query.QueryServicesOptions.withDefaults (QueryServicesOptions.java:99) at com.salesforce.phoenix.qu ery.QueryServicesImpl. (QueryServicesImpl.java:44) на com.salesforce.phoenix.jdbc.PhoenixDriver. (PhoenixDriver.java:67) на com.salesforce.phoenix.jdbc.PhoenixDriver. (PhoenixDriver.java:58) ... 11 еще

Сначала я думал, что путь класса имеет два xmls по умолчанию и его бросание ошибки, потому что одна из двух из какой-то старой версии jbase jar. Но путь класса не имеет hbase jar. Он имеет только один phoenix-2.0.1-client.jar. Я попытался следующие вещи после того

  1. Настройка «hbase.default.for.version.skip» до истины в Hbase-site.xml и добавив, что в пути к классам
  2. Установка «hbase.default.for .version.skip "в true в hbase-default.xml
  3. Как раз для эксперимента, я также попытался удалить hbase-default.xml.

Ничего не работает до сих пор. Результат постоянный. Я использую cloudera hbase cdh 4.4. Любая помощь была бы чрезвычайно оценена. Спасибо заранее.

ответ

0

Связанные: https://groups.google.com/forum/#!topic/phoenix-hbase-user/GpeGDDjEH_g

решение, как представляется, чтобы удалить META-INF/услуги/java.sql.Driver от феникс - client.jar (или Феникс-ядро-.jar) и вместо этого использовать класс .forName («com.salesforce.phoenix.jdbc.PhoenixDriver») в вашем коде где-нибудь (прежде чем пытаться открыть соединение), поскольку Jboss, похоже, изменяет порядок банок по-разному от tomcat.

это работало для меня (предполагая, что феникс устанавливается в локальном хранилище Maven):

mkdir /tmp/myjar 
cd /tmp/myjar 
cp ~/.m2/repository/com/salesforce/phoenix-core/3.0.0-SNAPSHOT/phoenix-core-3.0.0-SNAPSHOT.jar ./ 
jar -xvf phoenix-core-3.0.0-SNAPSHOT.jar 
rm META-INF/services/java.sql.Driver 
rm phoenix-core-3.0.0-SNAPSHOT.jar 
jar -cvf phoenix-core-3.0.0-SNAPSHOT.jar ./ 
cp phoenix-core-3.0.0-SNAPSHOT.jar ~/.m2/repository/com/salesforce/phoenix-core/3.0.0-SNAPSHOT/ 

re-build the webapp and deploy to Jboss: 
cd ~/phoenix-restservice 
mvn clean install 

дополнительный трюк для интеграции JBoss/Phoenix - Jboss выдает эту ошибку, как она включает в себя Resteasy реализацию JAX-RS по умолчанию и Hbase использует Джерси JAX-RS банки, которые вызывает столкновение (как в Deploying a Jersey webapp on Jboss AS 7):

"org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011232: Only one JAX-RS Application Class allowed" 

для исправления добавить в ~/your_phoenix_restservice/SRC/основной/WebAPP/WEB-INF/интернет.XML:

<context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>false</param-value> 
</context-param> 
<context-param> 
    <param-name>resteasy.scan.providers</param-name> 
    <param-value>false</param-value> 
</context-param> 
<context-param> 
    <param-name>resteasy.scan.resources</param-name> 
    <param-value>false</param-value> 
</context-param> 

также это хорошая идея, чтобы инициализировать соединение Hbase при запуске, это может быть сделано с помощью InitServlet, как описано в JBoss at Work: A Practical Guide, p.260

как примечание стороны вы против открытой поиске вашей версии апите отдых для феникса? это было бы полезно для нас и множества других людей.

Смежные вопросы