Hive安装
hive的安装有三种模式:
- 直接使用内置的内存数据库Derby来安装
- 使用关系型数据库(mysql)作为元数据存储来安装
- 使用mateServer+mysql来安装
远程关系型数据库安装
部署结构图
安装步骤
hadoop相关环境需要先安装
-
安装mysql
-
使用yum安装mysql服务
yum install mysql-server -y
如果出现
没有可用软件包 mysql-server
错误的时候,则需要添加mysql社区的yum源wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm
-
启动mysql服务
service mysqld start
-
mysql设置成开机启动
chkconfig mysqld on
-
修改root密码
``` --切换数据库 use mysql --查看表 show tables --查看表的数据 select host,user,authentication_string from user; --插入权限数据 grant all privileges on *.* to 'root'@'%' identified by '123' with grant option --删除本机的用户访问权限(可以执行也可以不执行) delete from user where host!='%' --刷新权限或者重启mysqld的服务 service mysqld restart;--(重启mysql服务) flush privileges;--(刷新权限) ```
-
-
安装Hive
-
上传解压
tar -Zxvf apache-hive-2.3.9-bin.tar.gz mv apache-hive-2.3.9-bin hive-2.3.9
-
配置环境变量
vi /etc/profile #配置HIVE_HOME #同时将bin目录添加到path export HIVE_HOME=/usr/local/hive-2.3.9 $HIVE_HOME/bin
-
修改配置文件
cd hive-2.3.9/conf mv hive-default.xml.template hive-site.xml vi hive-site.xml #修改内容如下 #光标到<configuration>这一行然后输入:.,$-1d #以上命令表示从当前行删除到倒数第二行
添加一下配置(根据自己服务器情况调整配置路径以及密码),保存
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop-node04: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>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property>
-
初始化数据库
#初始化之前一定要将mysql的连接驱动jar包放到hive的lib目录下 schematool -dbType mysql -initSchema
初始化完之后,我们可以看到mysql中新增了对应的数据库
-
-
验证测试
- 进入命令行
hive
- 进入命令行
-
创建表
create table psn(id int,name string);
-
插入数据
insert into psn(id,name) values(1,"张三");
从上图我们可以看出实际上数据的插入就是一次MR操作
-
查询表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oflRlay8-1653297658296)(F:\study\bigdata\hive\hive安装\images\image-20210726143637078.png)]
从上图我们可以看出整个的操作跟操作普通是sql是一模一样的
-
删除表
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ffd487357bd45cfb97272bf3d0e7d84.png#pic_center)
元数据服务+关系型数据库模式
部署结构图
安装步骤
-
规划机器
ip 用途 192.168.56.154 数据库 192.168.56.152 启动MetaStoreServer 192.168.56.151 MetaStroreClient -
安装mysql
与上面相同
-
安装Hive
-
192.168.56.152上安装HIVE,方法与上面相同,只需将
hive-site.xml
配置文件修改成:<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_romote/warehouse</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop-node04:3306/hive_remote?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>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> </configuration>
-
192.168.56.151上安装HIVE,方法与上面相同,只需将
hive-site.xml
配置文件修改成:<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://hadoop-node02:9083</value> </property> </configuration>
-
-
启动MetaServer
hive --service metastore
-
验证
在192.168.56.151上执行hive命令,我们可以看到也可以正常连接,同时也可以完成我们以上的所有建表、查询、删除等操作
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
c从这句描述我们可以看到,hive2.x之后就不建议使用MR作为执行引擎,而是建议采用sprak这样的执行引擎。
高可用
现在不管什么服务都追求高可用,同理hive也是不例外,也需要保证高可用,而hive的高可用的思路:
- 引入hiveserver2来对MateServer进行一层封装,不让元数据服务和HDFS直接暴露给客户端
- 保证mateserver的高可用
高可用部署架构图
Hiveserver2简介
HiveServer2是一个服务接口,能够允许远程的客户端去执行SQL请求且得到检索结果。HiveServer2的实现,依托于Thrift RPC,是HiveServer的提高版本,它被设计用来提供更好的支持对于open API例如JDBC和ODBC。
高可用搭建
Hiveserver2高可用搭建
Hiveserver2的高可用需要依赖zookeeper,所以搭建之前先安装好zookeeper集群,不过能hive,zookeeper集群肯定已经搭建完了。_
-
修改
hive-site.xml
配置文件<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_romote/warehouse</value> </property> <!--该部分主要配置mateserver的高可用--> <property> <name>hive.metastore.uris</name> <value>thrift://hadoop-node01:9083,thrift://hadoop-node02:9083</value> </property> <!--该部分主要配置mateserver数据存储方式--> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop-node04:3306/hive_remote?createDatabaseIfNotExist=true&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> <!--以下的配置是用于配置hiveserver2高可用的配置--> <property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value> </property> <property> <name>hive.server2.zookeeper.namespace</name> <value>hiveserver2_zk</value> </property> <property> <name>hive.zookeeper.quorum</name> <value>hadoop-node04:2181,hadoop-node02:2181,hadoop-node03:2181</value> </property> <property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>hadoop-node01</value> </property> <property> <name>hive.server2.thrift.port</name> <value>10001</value> </property>
以上我是将元数据高可用和hiveserver2高可用的配置放在一起,实际环境也可以拆开,部署到不同的机器上。
-
在两台机器机器上分别启动mateserver和hiveserver2
mkdir -p /data/logs/hive nohup hive --service metastore >> /data/logs/hive/metastore.log 2>&1 & nohup hive --service hiveserver2 >> /data/logs/hive/hiveserver.log 2>&1 &
-
使用
beeline
来测试链接beeline !connect jdbc:hive2://hadoop-node04,hadoop-node02,hadoop-node03/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk root 123
-
验证高可用
通过
netstat
命令来查看对应的进程号,然后用kill -9 进程号的方式将服务杀死,然后观察客户端链接的变化;不过需要注意的是:通过beeline来练级如果客户端已经链接到具体的hiveserver2服务之后,你把对应hiveserver2杀掉,他是不会自动重新链接另外一台hiveserver2的,需要我们重新进入beeline重新链接一下。 -
验证高可用
通过
netstat
命令来查看对应的进程号,然后用kill -9 进程号的方式将服务杀死,然后观察客户端链接的变化;不过需要注意的是:通过beeline来练级如果客户端已经链接到具体的hiveserver2服务之后,你把对应hiveserver2杀掉,他是不会自动重新链接另外一台hiveserver2的,需要我们重新进入beeline重新链接一下。