2015-03-02 195 views
1

由于上述错误,基于Tomcat的REST API应用程序无法处理请求。我曾尝试以下的事情至今:InvocationTargetException来自org.apache.hadoop.hbase.client.HConnectionManager.createConnection的异常

  1. 检查是否所有的jar文件都可以或者不存在的所有文件
  2. 检查权限tomcat/webapp/目录
  3. 防火墙规则
  4. HBase的是速效或不

但后来也得到异常。我正在使用CDH 5.3.1其中包含HBase 0.98.6。有谁知道如何解决这个问题?它试图建立连接

2015-03-03 05:09:02 privateLog [ERROR]   java.lang.reflect.InvocationTargetException  org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:413) 
       org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:306) 
       com.amazon.dao.MyDAO.<clinit>(SensorDataDAO.java:78) 
       sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
       sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
       sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
       java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
       org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) 
       org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74) 
       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958) 
       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911) 
       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) 
       org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
       org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
       org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
       org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
       org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
       org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
       org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
       org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
       org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
       org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
       org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
       org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779) 
       org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) 
       org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
       org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895) 
       org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871) 
       org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) 
       org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958) 
       org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599) 
       java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
       java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
       java.util.concurrent.FutureTask.run(FutureTask.java:166) 
       java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
       java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
       java.lang.Thread.run(Thread.java:724) 
       com.amazon.dao.MyDAO <clinit> 

代码如下:

public class MyDAO { 

    protected static HConnection connection; 


    static { 
     Configuration conf = HBaseConfiguration.create(); 
     conf.addResource("hbase-site.xml"); 
     connection = HConnectionManager.createConnection(conf); 
     // connection object is still null at this point 
    try { 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    } 
} 
+1

你能分享你在哪里试图连接到HBase的片断? – Venkat 2015-03-02 18:45:23

+0

是的..一分钟内 – Shekhar 2015-03-02 18:55:49

+1

请包括*完整*堆栈跟踪 – javadba 2015-03-03 00:22:58

回答

0

我解决了我的问题。我发现了这个错误的两个原因。如果有人面临同样的错误,那么这个答案可能会帮助他们:)

  1. 某些jar文件从类路径丢失,因此InvocationTargetException来了。由于我们使用基于Ant的构建系统,而不是基于Maven,所以一些jar文件丢失了。基本上我们需要将几乎所有的jar文件都存在于/etc/hadoop,/etc/hadoop-hdfs,/etc/hbase/etc/zookeeper目录中。

请把我们使用Cloudera的Hadoop发行版,如果 您使用的是一些不同的分布,那么这些路径可能会有所不同音符。

  • 第二个主要问题是,我们没有包括hdfs-site.xml文件同时创建配置对象。由于我们使用名称节点高可用性功能,因此该文件是必需的。如果此文件不存在,则hbase无法连接到正确的名称节点服务。
  • 现在连接相关的代码如下所示:

    public class MyDAO { 
    
        protected static HConnection connection; 
    
        static { 
         Configuration conf = HBaseConfiguration.create(); 
         conf.addResource("hbase-site.xml"); 
         conf.addResource("hdfs-site.xml"); 
         conf.addResource("core-site.xml"); 
         connection = HConnectionManager.createConnection(conf); 
        try { 
        } catch (Exception ex) { 
         ex.printStackTrace(); 
        } 
        } 
    } 
    
    2

    你可以尝试设置到你的conf呢?

    config.set("hbase.zookeeper.quorum", "zookeeper-ip:port"); 
    

    如果这有效,那么我们可以检查您设置到conf中的hbase-site.xml是否具有正确的细节。

    相关问题