自用-小组作业——Hive-MySQL数据库搭建及SQL语句实例练习

前言

为什么使用MySQL

  • Hive元数据的集中存放地为metastore,而metastore默认使用内嵌的derby数据库作为存储引擎,会默认将Hive元数据存放在Derby数据库中,只能允许一个会话连接,只适合简单的测试。
  • 这在实际生产环境中的对于多用户访问存在短板,为了支持多用户会话,则需要一个独立的元数据库--使用Mysql数据库作为外置存储引擎,会完美解决这个问题。
  • 应该明白的是,hive只是hadoop的一个插件工具--仓库工具,将结构化的数据进行存储,包括它的数据操作,依赖于mapreduce,它的数据管理,依赖于外部系统--MySQL。

步骤概述

  • 首先获得对应版本的MySQL安装包和驱动包(mysql jar包),解压安装MySQL;
  • 配置元数据到MySQL,进行相关文件配置,拷贝JDBC驱动包,创建新的元数据库;
  • 初始化Hive元数据库,进行hive表创建测试;
  • 查看MySQL元数据,外置数据库是否对接成功。

Hive-MySQL部署

详见资源:Xmid流程图。

最终验证:

组内分工:常峥 组内完成度:100%

hive是否安装成功,并测试MySQL是否与hive对接成功

1.1查看hive是否安装成功

fe5f92fb9f3741699653ecbb5d1e5c4a.png进入hive客户端,进行简单交互即说明hive安装成功

c9e1c205174c4b289fe0adc3605bdf9b.png

0535e90ee1b64d08a01fa89ebdb9805f.png

1.2MySQL是否安装成功,Hive-MySQL数据库部署成功

#启动mysql服务
[root@hadoop1 software]# systemctl start mysqld
#登录mysql
mysql -uroot -p“password”
出现mysql命令行界面即成功
  • 查看hive3(设置的存储元数据的数据库),初始化后出现:

81247848574145dca697d5dd0557b502.png

  • 查看hive3里的74张元数据表:

33be107709bd456b97adec8ab24488d6.png

  • 查看元数据库中的库、表、列信息:

f2af56d870f54ee89a9a10b1939493a1.png

至此hive元数据已存储于mysql中,可得出hive已成功对接MySQL

hive远程登录部署

组内分工:鲁超 组内完成度:100%

1、在对应配置文件中添加如下配置:

core-site.xml:

#配置hadoop核心配置文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

<!--hiveserver2配置所有节点的用户都可作为代理用户-->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    
    <!--hiveserver2配置用户能够代理的用户组为任意组-->
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    
    <!--hiveserver2配置用户能够代理的用户为任意用户-->
    <property>
        <name>hadoop.proxyuser.root.users</name>
        <value>*</value>
    </property>

hive-site.xml:

"<value>hadoop1</value>"指的是hive初始安装配置机器

#配置hive核心配置文件
vim /opt/module/hive/conf/hive-site.xml

#在文件中添加如下配置
    <!-- 指定hiveserver2连接的host -->
    <property>
       <name>hive.server2.thrift.bind.host</name>
       <value>hadoop1</value>
    </property>

    <!-- 指定hiveserver2连接的端口号 -->
    <property>
       <name>hive.server2.thrift.port</name>
       <value>10000</value>
    </property>

2、分发文件

修改完配置文件后,将hive文件分发至目标机器:hadoop3

#远程拷贝命令scp,跨机器复制文件
#也可以使用之前写好的xsync分发命令
[root@hadoop1 hadoop-3.1.3]# scp -r /opt/module/hive hadoop3:/opt/module

分发成功:

08611debc013487c949634b582270306.png

3、测试

  • hadoop1启动hivesever2:

bin/hive --service hiveserver2

    服务会自动挂起:

59469e7f82964aa8b8e3214909dbe65b.png

  • hadoop3使用beeline远程连接hadoop1 hive

hadoop3使用beeline命令行远程登录hive,而beeline是使用JDBC的方式访问HiveServer2的客户端,远程登录的命令行会出现JDBC。

[root@hadoop1 hive]# bin/beeline -u jdbc:hive2://hadoop1:10000 -n root

91091765e23c4ab59a96a746e9f2bfc6.png

  • 远程连接的报错:hadoop1拒绝连接-连接失败

fc7cc96e75e741148154162e89914e9c.png

分析:节点不完整所致。

解决方法:关闭服务,查看节点,确保节点完整。解决后hadoop1重启hiveserver2服务,hadoop3使用beeline命令行远程登录hive,出现客户端页面即代表成功。

Hive-SQL语句实例操作练习

组内分工:邵明月 组内完成度:100%  

使用执行sql脚本的方式进行表的创建,数据添加,查询。 

一、创建sql脚本文件:

#在hive目录下创建datas目录
mkdir datas

#在datas下创建脚本文件和结果存储文档
touch hive_test1.sql
touch hive_result2.txt

221c3946f3d24aa5b903611f7a14abaf.png

二、​​​​​​写入HQL语句:

a7c7a7f7652d4935821ebbe4cd94ed09.png

三、执行sql脚本文件

并将结果存储在同一目录下的名为“hive_result2.txt”文档中

[root@hadoop1 hive]# bin/hive -f /opt/module/hive/datas/hive_test1.sql  > /opt/module/hive/datas/hive_result2.txt

四、HQL语句分析:

组内分工:邵明月 组内完成度:100%

1、创建一个为stu_info的表

此处我分步进行表的存储,数据的插入,查询,多次执行sql脚本文件,以便报错时能查看为哪行错误

sql语句:

create table stu_info (stu_id string, stu_name string, brithday string, sex string);
#()内为表头字段,并设置了它们的数据类型

1.1查看hive数据库:创建成功

#进入hive命令行查看已经创建的表
hive>show tables;

70361928a2fa42929191d9cf39742084.jpeg

2、向stu_info表中插入数据:注意关键字完整及中英文符号

sql语句:插入四条完整信息

insert into stu_info values
('010', '于谦', '1998-08-23', '男'),
('011', '潘长江', '1995-05-27', '男'),
('012', '杨紫', '1996-12-21', '女'),
('013', '蒋欣', '1997-11-08', '女');

执行sql脚本文件,输入数据,显示插入成功:

498dc9bcd4f44745808b36bc7f1ba6d4.png

3、进行数据查询:

3.1执行脚本文件,查询表中所有男生的信息,包括学号、姓名,结果按照生日先后顺序排序

sql语句:

select * from stu_info where sex="男" order by brithday asc;
#where 查询条件
#order by 将查询数据进行排序,DESC为倒叙,ASC为升序

sql脚本文件运行成功:

0e53c54e71494aabb757eaacda8aed3e.png

查看结果存储文档:

d205a0c3ebff45189ae55195bdd6eedf.png

3.2查询表中生日是在 1998 年之前的学生的信息,包括学号、姓名、生日和性别。

sql语句:

select * from stu_info where brithday < '1998';

sql脚本运行成功:

9ec71c3afed945c383624f879e0b4247.png

查询结果文档:

结果存储文档,查询sql语句运行结果:此文档每次运行一次将会更新覆盖上一次结果

71030ae3716646568d619827078feb11.png

 

文档贡献者:邵明月

成员:常峥、鲁超

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值