2015-08-28 46 views
0

我在三台机器上设置了hadoop群集上的配置单元。 Hadoop的(2.7.1)和德比(10.11)的罚款运行:apache配置单元无法连接到derby:metastore_db虽然来自derby的ij可以

[email protected]:~$ ij 
ij version 10.11 
ij> connect 'jdbc:derby://localhost:1527/metastore_db;create=true'; 
ij> select * from a; 
ID 
----------- 

0 rows selected 
ij> 

但蜂巢抱怨:

... 
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 
     at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522) 
     at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) 
     at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 
     at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523) 
     at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:86) 
     at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132) 
     at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:104) 
     at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005) 
     at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024) 
     at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503) 
     ... 8 more 
Caused by: java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
     at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1521) 
     ... 14 more 
Caused by: javax.jdo.JDOFatalDataStoreException: Unable to open a test connection to the given database. JDBC url = jdbc:derby://localhost:1527/metastore_db;create=true , username = APP. Terminating connectio pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------ 
java.sql.SQLException: No suitable driver found for jdbc:derby://localhost:1527/metastore_db;create=true 
... 

环境变量:

# Java 
export JAVA_HOME=/usr/lib/jvm/jdk 

# derby 

export DERBY_HOME=/usr/local/derby 
export PATH=$PATH:$DERBY_HOME/bin 
export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar 

# Hadoop 
export HADOOP_HOME=/usr/local/hadoop 
export PATH=$PATH:$HADOOP_HOME/bin 
export PATH=$PATH:$HADOOP_HOME/sbin 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export HADOOP_YARN_HOME=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" 


# hive 

export HIVE_HOME=/usr/local/hive 
export PATH=$PATH:$HIVE_HOME/bin 
export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:. 

蜂巢-site.xml中只有此属性在配置中:

<property> 
    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:derby://localhost:1527/metastore_db;create=true </value> 
    <description>JDBC connect string for a JDBC metastore </description> 
    </property> 

这是怎么回事?

+0

将其更改为mysql,postgres或oracle。德比会崩溃。 –

+0

我会,我只需要测试IAAS提供商(或多个提供商),并认为我修好德比的事情。不知何故会很好理解为什么它崩溃。 – arthur

+0

德比不建议蜂房的metastore。它只是将数据存储在文件中,并且在多个用户尝试访问配置单元时会崩溃。 –

回答

1

你说:

export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar 

,但你也说:

jdbc:derby://localhost:1527/metastore_db;create=true 

因此你给了德比的客户机/服务器配置的JDBC连接URL,但您提供的CLASSPATH是为德比的嵌入式配置。

因此你才会收到错误:

No suitable driver found 

你可以改变你的CLASSPATH,或者你可以改变你的JDBC连接URL。

如果你想使用Derby的客户机/服务器配置,切换你的CLASSPATH说:

export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derbyclient.jar 

,因为你需要为这个配置的JDBC客户端驱动程序。

如果你想使用Derby的嵌入式结构,独自离开你的CLASSPATH,改变你的JDBC连接URL说:

jdbc:derby:metastore_db;create=true 

要了解更多有关不同德比的配置,在这里阅读:http://db.apache.org/derby/docs/10.11/getstart/cgsquck70629.html

+0

感谢您的帖子。不幸的是我得到了同样的错误。我已经启动了derby服务器:'startNetworkServer -h localhost -p 1527'。 'echo $ CLASSPATH'返回':/usr/local/derby/lib/derbyclient.jar:/ usr/local/hive/lib/* :.',与ij连接工作:'ij> connect'jdbc:derby:/ /本地主机:1527/metastore_db;创建=真“; ij>',配置单元继续抱怨:'java.sql.SQLException:找不到适合jdbc的驱动程序:derby:// localhost:1527/metastore_db; create = true' – arthur

+0

Hive无法找到derbyclient.jar。也许Hive有自己的方式来控制CLASSPATH?可能你可以用-verbose:class来运行Hive。可能在异常链中有更多信息可用:http://wiki.apache.org/db-derby/UnwindExceptionChain –

+0

哦!你说你的Hive集群有多台机器。可能你只是为其中一台机器配置了CLASSPATH,并且错误来自另一台机器? –

0

当我在另一个终端选项卡中打开spark-shell会话时,当在不同终端选项卡中已经打开会话时,我开始看到此错误。关闭这个旧的终端选项卡,并在当前选项卡中再次启动spark-shell会话修复了问题。

相关问题