这是我虚拟机的拓扑结构:
这里我搭建的版本是 hadoop2.7.1 hive2.3.6 这两个可以兼容
首先,确保 node1 上的 mysql安装成功,且可以远程登录,并设置好密码
用xftp将下载的hive上传并解压
下载地址:https://mirror.bit.edu.cn/apache/hive/
配置环境变量:vi /etc/profile
保存退出后:source /etc/profile
到hive的conf目录中创建 hive-site.xml文件:
vi hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node3:9083</value>
</property>
</configuration>
将 node2 上的 hive236目录上传到 node3, node4上:
scp -r hive236/ root@node3:/usr/local/
scp -r hive236/ root@node4:/usr/local/
在node4上先配置环境变量
我们将node4与node2 都配置成hive客户端,所有node4上不需要做任何修改,只需配置环境变量
在 node3 上创建 metastore serve
首先配置环境变量
然后在hive的conf配置hive-site.xml
vi hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 在hdfs上文件的位置 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- 元数据的位置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>a</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>
在node3执行以下命令初始化库: schematool -dbType mysql -initSchema
在node2或node4客户端测试
hive
之前测试用hive命令区链接一直卡在Logging initialized using configuration in jar:file:/usr/local/apache-hive-2.3.4/lib/hive-common-2.3
在网上查了很多资料,说实话没啥用,后来检查了是我的node1的namenode掉了,而node2的namenode还是standby状态(明明配置了高可用,我也不知道咋回事),把node1的节点启动,有一个namenode为active状态即可
测试一些hive命令:
create database ryan;
use ryan;
create table produce_hive( id int, name varchar(20) );
可以在hdfs上看创建了一个目录
在mysql上也有元数据
insert into produce_hive values(1, 'apple');
select * from produce_hive;
最后在node3上将 metastore server配置成自启动服务
cd /etc/rc.d/init.d/
vi metastoreServer
#!/bin/sh
#chkconfig: 345 90 90
#description: hive metastore
#processname: hive_metastore_server
source /etc/profile
# 启动服务的时间
DATE_STR=`/bin/date "+%Y%m%d%H%M%S"`
# 日志文件名称(包含路径)
HIVE_METASTORE_LOG=${HIVE_HOME}/logs/hiveserver2-${DATE_STR}.log
/usr/bin/nohup ${HIVE_HOME}/bin/hive --service metastore >>${HIVE_METASTORE_LOG} 2>&1 &
添加执行权限
chmod +x metastoreServer
加入 chkconfig
chkconfig --add metastoreServer
chkconfig --list
启动服务:service metastoreServer start
即可成功启动