2015-08-28 38 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會話修復了問題。

相關問題