http://www.tutorialspoint.com/hive/hive_installation.htm
https://cwiki.apache.org/confluence/display/Hive/HiveDerbyServerMode
但若照著做總是會出現出乎意料的問題
1. Derby 無法啟動
原因: 假設出現 package steal timer 等字眼,很有可能是你的 ClassPath 重複使用了
derbytools.jar ,根據 第二個網址 請您把 derbyclient.jar & derbytools.jar from $DERBY_HOME/lib to $HADOOP_HOME/lib
這個動作不需要做,因為第一個網址已經把 derbytools.jar 放置在 ~/.bashrc 的 CLASSPATH
2.Derby 無法啟動
原因:因為找不到 jdbc driver
請至 hive-site.xml,加入 如下(第一篇教學網址沒說)
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.ClientDriver</value>
<description>Driver
class
name
for
a JDBC metastore</description>
</property>
2.啟動 Hive 的時候 出現 connection refuse by port 1527
原因: 這並不是因為 Derby is not running,而是因為在 java 預設啟動時有Security policy
,請至 $JAVA_HOME/jre/lib/security 目錄下,編輯 java.policy ,在最下面加入一行
permission java.net.SocketPermission "localhost:1527", "listen,resolve";
如圖
參考 http://stackoverflow.com/questions/21154400/unable-to-start-derby-database-from-netbeans-7-4
3.在 $HIVE_HOME下執行 bin/hive 仍無法 work
出現
java.net.URISyntaxException when starting HIVE
原因是因為,原本我們的 hive-site.xml本來就是複製而來,Hive啟動時需要一個 tmp的目錄
因此修改檔案內容為,當然我假設你在 hdfs 已有建立一個名為 /tmp 的目錄
<name>hive.exec.scratchdir</name>
<value>/tmp/hive-${user.name}</value>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/${user.name}</value>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/${user.name}_resources</value>
<name>hive.scratch.dir.permission</name>
<value>733</value>
注意事項:啟動 Hive 之前 HDFS 要可以 work , Hive 會 connect 至 NameNode
安裝Spark on Hive注意事項:
1.複製 $Hive_HOME/conf/hive-site.xml to $SPARK_HOME/conf
啟動 spark-shell後會出現
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40
Solution:這個原因是 spark call hive , but hive need derby 缺少 derby.jar 檔在 Hive 的 Libery請至$DERBY_HOME/lib下 複製 derby.jar 至 $HIVE_HOME/lib下 重新啟動 spark-shell
沒有留言:
張貼留言