2015年12月10日 星期四

Install Hive and derby on HDFS 注意事項

安裝 Hive 需要安裝一個database,參考以下2個網址均是使用 Derby
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>
參考 http://stackoverflow.com/questions/27099898/java-net-urisyntaxexception-when-starting-hive

注意事項:啟動 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

沒有留言:

張貼留言