Centos7下搭建hive集群并配置成自启动服务

一、Centos7下搭建hive集群
注意:hive集群的搭建与hadoop版本有密切关系 ( 本篇博客的 hadoop版本为 2.7.1,所以hive要用 hive 2.3.6 , 而 hadoop 2.5.2 配 hive1.2.2 , 其它的版本可自测)

1. 首先看一下我的环境拓扑图在这里插入图片描述
2. 简单了解hive多用户模式原理
在这里插入图片描述
3. 开始搭建hive集群

(1) 确保 node1上的 mysql安装成功,且可以远程登录,并设置好密码

(2) 在node2中安装与配置 hive CLI 客户端

(3)下载hive的安装包,并上传hive安装包到node2中 /usr/local目录下

官网下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
hive2.3.6下载地址(提取码:sbty):https://pan.baidu.com/s/1NJAgWqEIbNY1exSH_meF9g

(4) 解压hive压缩包并重命名

解压命令:tar -xvf apache-hive-2.3.6-bin.tar.gz
重命名命令:mv apache-hive-2.3.6-bin/ hive236

(5) 配置环境变量

编辑环境变量: vi /etc/profile

export HIVE_HOME=
export PATH=$PATH:$HIVE_HOME/bin

在这里插入图片描述
刷新环境变量:source /etc/profile

(6) 到hive中conf目录中创建 hive-site.xml文件

进入命令: cd /usr/local/hive236/conf
编辑命令: vi hive-site.xml
注意:mysql8以上版本驱动应改为com.mysql.cj.jdbc.Driver

metadata即元数据:元数据包含用Hive创建的database、tabel等的元信息,元数据存储在关系型数据库中。如Derby、MySQL等。

Metastore服务:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

修改自己的mysql的节点ip与端口,账号密码,以及metastore服务节点位置端口。

<?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>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.jdbc.Driver</value>
	</property>
	<property> 
		<name>javax.jdo.option.ConnectionUserName</name> 
		<value>mysql账号</value>
	</property>
	<property> 
		<name>javax.jdo.option.ConnectionPassword</name> 
		<value>密码</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>


4. 知识点补充 :Metastore有三种配置方式

(1) Embedded Metastore Database (Derby) 内嵌模式
内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。配置项如下:
在这里插入图片描述

(2) Local Metastore Server 本地元存储
本地元存储和远程元存储都采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。
本地元存储不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。配置项如下:在这里插入图片描述

(3) Remote Metastore Server 远程元存储
远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程元存储的metastore服务和hive运行在不同的进程里。配置项如下:

在这里插入图片描述

5. 将 node2 上的 hive236目录同步到 node3, node4节点上
同步命令:scp -r hive236/ root@node3:/usr/local/
同步命令:scp -r hive236/ root@node4:/usr/local/

6. 将node4与node2 都配置成hive客户端(由于node4的hive是从node2同步过来的,所以无需更改,只要配置一下环境变量即可)
(1)在node3,node4节点上配置环境变量
编辑环境变量命令:vi /etc/profile
在环境变量中加入

export HIVE_HOME=
export PATH=$PATH:$HIVE_HOME/bin

刷新环境变量命令:source /etc/profile

7. 如果要在 node3 上创建 metastore server,则按以下配置( 为了提高更多的可访问性,可以在其它节点上也配置 metastore server服务 )

记得配置node3的环境变量
到node3节点中hive的conf目录下创建 hive-site.xml文件

进入命令: cd /usr/local/hive236/conf
编辑命令: vi hive-site.xml
注意:mysql8以上版本驱动应改为com.mysql.cj.jdbc.Driver

<?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.jdbc.Driver</value>
	</property>
	<property> 
		<name>javax.jdo.option.ConnectionUserName</name> 
		<value>mysql账号</value>
	</property>
	<property> 
		<name>javax.jdo.option.ConnectionPassword</name> 
		<value>密码</value>
	</property> 
    <property>
		<name>hive.metastore.schema.verification</name>
		<value>false</value>
    </property>
    <property>
		<name>datanucleus.schema.autoCreateAll</name>
		 <value>true</value>
    </property>
</configuration>

将mysql驱动包上传到node3的hive236的lib目录下, 由metastore server访问数据库
注意mysql版本,我的是5.5.47,所以jar包也对应是5点几的版本,可到本地maven仓库中找到对应jar包
上传后,启动node3服务端,命令:hive --service metastore &

在这里插入图片描述

之后执行初始化库命令: schematool -dbType mysql -initSchema
在这里插入图片描述

8. 测试hive服务

(1) 查看mysql中数据库是否创建出来了
连接mysql命令:mysql -uroot -pa
查看database命令:show databases;
在这里插入图片描述

(2) 在node2或node4客户端测试,命令:hive
在这里插入图片描述
如果遇到这个错误(未遇到可跳过): java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
解决方法:将hive下的新版本jline的JAR包拷贝到hadoop下
命令:cp /usr/local/hive122/lib/jline-2.12.jar /usr/local/hadoop252/share/hadoop/yarn/lib/
再将原来 hadoop271/share/hadoop/yarn/lib/jline-0.9.94.jar 改名
命令:mv jline-0.9.94.jar jline-0.9.94.jar.bak

(3) 在node2或者node4中测试与验证 hive
在hive中使用sql进行操作
命令:create database yc74;
在这里插入图片描述
使用yc74这个database:use yc74;
在hdfs中创建目录:create table produce_hive( id int, name varchar(20) );
在这里插入图片描述
查看表格:show tables;
插入数据:insert into produce_hive values(1, 'apple');
在这里插入图片描述
查看数据:select * from produce_hive;
在这里插入图片描述
补充知识点:在进行以上操作时,请注意以下几点(补充部分,可选)
1.哪些操作生成了mapreduce操作
(1) insert操作生成了mapreduce
(2) 其它操作只对mysql操作了元数据
(3) 观察: http://node3:8088
2.观察 hdfs中的目录变化情况,并打开生成的文件的内容
3.到mysql中查看hive对应的库及表
命令:select * from DBS;
命令:select * from TBLS;
命令:select * from COLUMNS_V2;

二、将metastore server配置成自启动服务

1. 在node3的 /etc/rc.d/init.d目录下,创建一个 metastoreServer 脚本

进入目录命令:cd /etc/rc.d/init.d
编辑脚本命令:vi metastoreServer.sh

#!/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 &

2. 改变权限,加入执行权限
加入权限命令:chmod +x /etc/rc.d/init.d/metastoreServer.sh

3. 加入到chkconfig启动服务
加入命令:chkconfig --add metastoreServer.sh
查看命令:chkconfig --list
在这里插入图片描述
4. 启动服务,命令:service metastoreServer start
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44422604/article/details/107189022
今日推荐