来自 org.apache.hadoop.hbase.client.HConnectionManager.createConnection 的 InvocationTargetException 异常
InvocationTargetException exception from org.apache.hadoop.hbase.client.HConnectionManager.createConnection
我的 tomcat 基于 REST API 的应用程序由于上述错误无法处理请求。到目前为止,我已经尝试过以下操作:
- 正在检查所有 jar 文件是否可用
- 正在检查
tomcat/webapp/
目录中所有文件的权限
- 防火墙规则
- Hbase是否可用
但随后也出现以下异常。我正在使用包含 HBase 0.98.6
的 CDH 5.3.1
。有谁知道如何解决这个问题?
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.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();
}
}
}
你能试着把它设置到你的 conf 中吗?
config.set("hbase.zookeeper.quorum", "zookeeper-ip:port");
如果这有效,那么我们可以检查您在 conf 中设置的 hbase-site.xml 是否具有正确的详细信息。
我解决了我的问题。我发现了这个错误的两个原因。如果有人遇到同样的错误,那么这个答案可能会对他们有所帮助:)
- class 路径中缺少一些 jar 文件,因此出现了 InvocationTargetException。由于我们使用的是基于 Ant 的构建系统而不是基于 Maven 的构建系统,因此缺少一些 jar 文件。基本上我们需要将几乎所有的 jar 文件放在
/etc/hadoop
、/etc/hadoop-hdfs
、/etc/hbase
和 /etc/zookeeper
目录中。
Please take a note that we are using Cloudera Hadoop distribution, if
you are using some different distribution then these paths may vary.
- 第二个主要问题是我们在创建配置对象时没有包含
hdfs-site.xml
文件。由于我们正在使用名称节点 HA 功能,因此此文件是必须的。如果此文件不存在,则 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();
}
}
}
我的 tomcat 基于 REST API 的应用程序由于上述错误无法处理请求。到目前为止,我已经尝试过以下操作:
- 正在检查所有 jar 文件是否可用
- 正在检查
tomcat/webapp/
目录中所有文件的权限 - 防火墙规则
- Hbase是否可用
但随后也出现以下异常。我正在使用包含 HBase 0.98.6
的 CDH 5.3.1
。有谁知道如何解决这个问题?
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.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();
}
}
}
你能试着把它设置到你的 conf 中吗?
config.set("hbase.zookeeper.quorum", "zookeeper-ip:port");
如果这有效,那么我们可以检查您在 conf 中设置的 hbase-site.xml 是否具有正确的详细信息。
我解决了我的问题。我发现了这个错误的两个原因。如果有人遇到同样的错误,那么这个答案可能会对他们有所帮助:)
- class 路径中缺少一些 jar 文件,因此出现了 InvocationTargetException。由于我们使用的是基于 Ant 的构建系统而不是基于 Maven 的构建系统,因此缺少一些 jar 文件。基本上我们需要将几乎所有的 jar 文件放在
/etc/hadoop
、/etc/hadoop-hdfs
、/etc/hbase
和/etc/zookeeper
目录中。
Please take a note that we are using Cloudera Hadoop distribution, if you are using some different distribution then these paths may vary.
- 第二个主要问题是我们在创建配置对象时没有包含
hdfs-site.xml
文件。由于我们正在使用名称节点 HA 功能,因此此文件是必须的。如果此文件不存在,则 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();
}
}
}