1. 程式人生 > >Hive Using Derby in Server Mode(用Derby配置Hive的metastore——伺服器模式)

Hive Using Derby in Server Mode(用Derby配置Hive的metastore——伺服器模式)

為什麼要配置Derby的伺服器模式呢?答案如下:

官方文件的一段話:Hive in embedded mode has a limitation of one active user at a time. You may want to run Derby as a Network Server, this way multiple users can access it simultaneously from different systems.

大概意思是:

Hive預設有一次只允許一個活動使用者的限制。 您可能要執行Derby作為網路伺服器,這樣多個使用者可以從不同的系統同時訪問它。

注意!!!很重要:版本不匹配導致安裝失敗是最蛋疼的事;所以請耐心看下官網的軟體安裝環境要求:比較簡單,我就不翻譯了,相信你比我理解的更好大笑

Requirements

  • Java 1.7
    Note:  Hive versions 1.2 onward require Java 1.7 or newer. Hive versions 0.14 to 1.1 work with Java 1.6 as well. Users are strongly advised to start moving to Java 1.8 .  
  • Hadoop 2.x (preferred), 1.x (not supported by Hive 2.0.0 onward).
    Hive versions up to 0.13 also supported Hadoop 0.20.x, 0.23.x.

進入主題:

開始配置:

1.下載安裝Derby

http://db.apache.org/derby/derby_downloads.html

2.設定環境變數

修改/etc/profile 檔案;

最終結果如下:

export JAVA_HOME=/usr/local/java/jdk1.8.0_101
export HADOOP_HOME=/cloud/hadoop-2.2.0
export HIVE_HOME=/cloud/hive-2.1.0
export DERBY_HOME=/cloud/derby-10.12.1.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$DERBY_HOME/bin


3.配置Hive連線伺服器模式下的Derby

在Hive的安裝目錄下的conf目錄下執行重新命名hive-default.xml.template 為hive-site.xml

[[email protected] conf]# pwd
/cloud/hive-2.1.0/conf
[[email protected] conf]# ls
beeline-log4j2.properties.template    hive-site.xml
hive-default.xml.template             ivysettings.xml
hive-env.sh.template                  llap-cli-log4j2.properties.template
hive-exec-log4j2.properties.template  llap-daemon-log4j2.properties.template
hive-log4j2.properties.template       parquet-logging.properties
[[email protected] conf]# mv hive-default.xml.template hive-site.xml
接著修改hive-site.xml
最終內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:derby://rm:1527/metastore_db;create=true</value>
		<description>JDBC connect string for a JDBC metastore</description>
	</property>
	 
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>org.apache.derby.jdbc.ClientDriver</value>
		<description>Driver class name for a JDBC metastore</description>
	</property>
</configuration>
解釋:jdbc:derby://rm:1527/metastore_db;create=true;這是一個jdbc連線地址,其中的rm是我的主機名,這裡應該改為你的ip或主機名;

4.複製jar包

把Derby安裝目錄下的lib目錄下的derbyclient.jar 和derbytools.jar分別複製到hive安裝目錄下的lib目錄下和Hadoop安裝目錄下的lib目錄

5.開啟Derby伺服器

Derby安裝目錄下的bin目錄下( 我的是/cloud/derby-10.12.1.1/bin)執行:

[[email protected] bin]# ./NetworkServerControl start -h 192.168.1.106 -p 1527

其中 -h用來指定server的ip(這裡應該是你允許Derby的主機ip)-p 用來指定埠號,一般為1527不要隨意指定

注意:一定要採用這種啟動方式,否則Derby將會預設只允許本機連線,而不是對外的一個伺服器模式;

6.初始化hive

在如下目錄下執行如下操作:

[[email protected] bin]# pwd
/cloud/hive-2.1.0/bin
[[email protected] bin]# ./schematool -dbType derby -initSchema 

如果這裡提示初始化完成(Completely!)

基本上已經成功了。看最後一步

7.開啟hive

在如下目錄下執行如下操作:

[[email protected] bin]# pwd
/cloud/hive-2.1.0/bin
[[email protected] bin]# ./hive

啟動成功後就進入了hive 的shell介面:" Hive > "

最後一次注意:

以後啟動hive只需要執行第5步和第7步

要同時開啟兩個視窗:因為Derby伺服器跑起來後是阻塞的狀態(命令列停在那不動,你千萬不要以為程式卡在那裡了,我的天!!!);

這時候你千萬不能用Ctrl+C來中斷,因為你將中斷的是伺服器,你要在另一個視窗執行第7步。

當然你也可以以後臺程序的形式來啟動derby(第5步):

./NetworkServerControl start -h 192.168.1.106 -p 1527 >/dev/null  2>&1 &

這樣就不會阻塞在那裡,而非得再開一個視窗了: