为什么要配置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
[root@rm conf]# pwd
/cloud/hive-2.1.0/conf
[root@rm 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
[root@rm 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)执行:
[root@rm bin]# ./NetworkServerControl start -h 192.168.1.106 -p 1527
其中 -h用来指定server的ip(这里应该是你允许Derby的主机ip)-p 用来指定端口号,一般为1527不要随意指定
注意:一定要采用这种启动方式,否则Derby将会默认只允许本机连接,而不是对外的一个服务器模式;
6.初始化hive
在如下目录下执行如下操作:
[root@rm bin]# pwd
/cloud/hive-2.1.0/bin
[root@rm bin]# ./schematool -dbType derby -initSchema
如果这里提示初始化完成(Completely!)
基本上已经成功了。看最后一步7.开启hive
在如下目录下执行如下操作:
[root@rm bin]# pwd
/cloud/hive-2.1.0/bin
[root@rm 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 &
这样就不会阻塞在那里,而非得再开一个窗口了: