2013-07-16 1 views
1

요청/응답을 처리하는 데 사용되는 자바 웹 서비스 (회사에서 독점 기술로 만든)가 있고 요청을 처리하는 동안 대화를 시도하고 있습니다. Hadoop의 Hive와 쿼리를 실행합니다. 그러나 단순히 연결을 초기화하려고하면 즉시 실패합니다.하이브에 접속하는 Java 웹 서비스 - DataNucleus ClassLoaderResolver 오류

다음은 실패한 코드 줄입니다. '나는 유사한 오류 메시지가 다른 하나의 문제를 발견

javax.jdo.JDOFatalInternalException: Unexpected exception caught. 
    at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1186) 
    at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:803) 
    at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:698) 
    at org.apache.hadoop.hive.metastore.ObjectStore.getPMF(ObjectStore.java:246) 
    at org.apache.hadoop.hive.metastore.ObjectStore.getPersistenceManager(ObjectStore.java:275) 
    at org.apache.hadoop.hive.metastore.ObjectStore.initialize(ObjectStore.java:208) 
    at org.apache.hadoop.hive.metastore.ObjectStore.setConf(ObjectStore.java:183) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:70) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:130) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:407) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.executeWithRetry(HiveMetaStore.java:359) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:504) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:266) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.<init>(HiveMetaStore.java:228) 
    at org.apache.hadoop.hive.service.HiveServer$HiveServerHandler.<init>(HiveServer.java:131) 
    at org.apache.hadoop.hive.service.HiveServer$HiveServerHandler.<init>(HiveServer.java:121) 
    at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveConnection.java:76) 
    at org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:104) 
    at java.sql.DriverManager.getConnection(DriverManager.java:582) 
    at java.sql.DriverManager.getConnection(DriverManager.java:185) 
    at (...my package...).RemoteCtrbTest.kickOffRemoteTest(RemoteCtrbTest.java:52) 

NestedThrowablesStackTrace: 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at javax.jdo.JDOHelper$16.run(JDOHelper.java:1958) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.jdo.JDOHelper.invoke(JDOHelper.java:1953) 
    at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1159) 
    at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:803) 
    at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:698) 
    at org.apache.hadoop.hive.metastore.ObjectStore.getPMF(ObjectStore.java:246) 
    at org.apache.hadoop.hive.metastore.ObjectStore.getPersistenceManager(ObjectStore.java:275) 
    at org.apache.hadoop.hive.metastore.ObjectStore.initialize(ObjectStore.java:208) 
    at org.apache.hadoop.hive.metastore.ObjectStore.setConf(ObjectStore.java:183) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:70) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:130) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:407) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.executeWithRetry(HiveMetaStore.java:359) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:504) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:266) 
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.<init>(HiveMetaStore.java:228) 
    at org.apache.hadoop.hive.service.HiveServer$HiveServerHandler.<init>(HiveServer.java:131) 
    at org.apache.hadoop.hive.service.HiveServer$HiveServerHandler.<init>(HiveServer.java:121) 
    at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveConnection.java:76) 
    at org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:104) 
    at java.sql.DriverManager.getConnection(DriverManager.java:582) 
    at java.sql.DriverManager.getConnection(DriverManager.java:185) 
    at (...my package...).RemoteCtrbTest.kickOffRemoteTest(RemoteCtrbTest.java:52) 

Caused by: org.datanucleus.exceptions.NucleusUserException: Persistence process has been specified to use a ClassLoaderResolver of name "jdo" yet this has not been found by the DataNucleus plugin mechanism. Please check your CLASSPATH and plugin specification. 
    at org.datanucleus.OMFContext.getClassLoaderResolver(OMFContext.java:319) 
    at org.datanucleus.OMFContext.<init>(OMFContext.java:165) 
    at org.datanucleus.OMFContext.<init>(OMFContext.java:137) 
    at org.datanucleus.ObjectManagerFactoryImpl.initialiseOMFContext(ObjectManagerFactoryImpl.java:132) 
    at org.datanucleus.jdo.JDOPersistenceManagerFactory.initialiseProperties(JDOPersistenceManagerFactory.java:363) 
    at org.datanucleus.jdo.JDOPersistenceManagerFactory.<init>(JDOPersistenceManagerFactory.java:307) 
    at org.datanucleus.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.java:255) 
    at org.datanucleus.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.java:182) 
    ... 35 more 

하지만 메이븐에 대해이었고, didn를 : 여기에

String connString = "jdbc:hive://"; 
Connection con = DriverManager.getConnection(connString, "", ""); 

는 스택 추적입니다 : 나는 크게 https://cwiki.apache.org/confluence/display/Hive/HiveClient에서 코드 샘플을 사용하고 있습니다 Hive (코드에 DataNucleus를 사용하는 하이브)가 포함되어 있습니다. Datanucleus, JDO and executable jar - how to do it?

하이브 및 datanucleus의 일부 속성을 지정하기 위해 hive-site.xml 파일을 사용하고 있습니다. 데이터 핵은 다음과 같습니다. 마지막 두 번은 문제를 해결하려고 시도했는데 datanucleus.classLoaderResolverName에 지정한 내용을 변경하면 따옴표로 묶인 오류 메시지가 변경됩니다.

<property> 
    <name>datanucleus.autoCreateSchema</name> 
    <value>false</value> 
</property> 

<property> 
    <name>datanucleus.fixedDatastore</name> 
    <value>true</value> 
</property> 

<property> 
    <name>datanucleus.classLoaderResolverName</name> 
    <value>jdo</value> 
</property> 

<property> 
    <name>javax.jdo.PersistenceManagerFactoryClass</name> 
    <value>org.datanucleus.jdo.JDOPersistenceManagerFactory</value> 
</property> 

서비스가 나는 위의 링크의 plugin.xml 및/또는 위치를 엉망으로 다른 유래 문제로, 항아리를 다시 번들되어 어떻게 든 만약 내가 알아낼 수있는 부분은 Manifest.mf 파일. 또한 플러그인 파일이 하이브 사이트 파일과 상호 작용하는 방법을 잘 모르겠습니다.

여기서 classpath는 classpath 대신 특정 jar를 추가해야합니다. 다음과 같은 데이터 핵 항아리를 사용하고 있습니다. * datanucleus-connectionpool-2.0.3.jar * datanucleus-enhancer-2.0.3.jar * datanucelus-rdbms-2.0.3.jar * datanucleus-core-2.0.3 .jar

도움을 주실 수있는 의견을 보내 주시면 대단히 감사하겠습니다. 필요한 경우 더 많은 정보를 제공 할 수 있으므로 문의하십시오.

+0

하이브 0으로 CDH5 위에 상어 8.1 응용 프로그램을 실행할 때 같은 문제가 있습니다.9 – vacuum

답변

0

DataNucleus는 OSGi 기반 플러그인 메커니즘을 사용합니다. OSGi 컨테이너에서 그것을 실행하지 않고 표준 maven 프로젝트를 사용하고 있다면 아마도 플러그인은 클래스 경로에 있지만 매니페스트와 관련된 문제로 인해 등록되지 않은 것입니다. 다음과 같이 시도해보십시오.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>copy-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/jars</outputDirectory> 
         <overWriteReleases>false</overWriteReleases> 
         <overWriteSnapshots>false</overWriteSnapshots> 
         <overWriteIfNewer>true</overWriteIfNewer> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

이것은 answered previously입니다.

1

귀사에서 독점 기술로 만든 응용 프로그램에 Spring 프레임 워크를 사용하는 경우 Spring-Hadoop을 활용할 수 있습니다. 그 후, HiveTemplate를 autowire하기

<hdp:configuration> 
    fs.default.name=${fs.default.name.url} 
    mapred.job.tracker=${mapred.job.tracker.url} 
</hdp:configuration> 

<hdp:hive-client-factory host="${hadoop.hive.host.url}" port="10000" 
    xmlns="http://www.springframework.org/schema/hadoop" /> 

<hdp:hive-template /> 

,

@Autowired 
HiveTemplate hiveTemplate; 

그리고 아래 그림과 같이 하이브를 조회 :

당신이 당신 applicationContext에 구성 아래에 추가하기 만하면됩니다

List<String> list = hiveTemplate.query(queryString, parameterMap);