大数据Hive入门案例


1 体验1:Hive使用起来和Mysql差不多吗?

1.1 背景

对于初次接触Apache Hive的人来说,最大的疑惑就是:Hive从数据模型看起来和关系型数据库mysql等好像。包括Hive SQL也是一种类SQL语言。那么实际使用起来如何?

1.2 过程

体验步骤:按照mysql的思维,在hive中创建、切换数据库,创建表并执行插入数据操作,最后查询是否插入成功。

create database itcast;--创建数据库
show databases;--列出所有数据库
use itcast;--切换数据库

在这里插入图片描述

--建表
create table t_student(id int,name varchar(255));
--插入一条数据
insert into table t_student values(1,"allen");
--查询表数据
select * from t_student;

在执行插入数据的时候,发现插入速度极慢,sql执行时间很长,为什么?在这里插入图片描述
最终插入一条数据,历史30秒的时间。在这里插入图片描述
查询表数据,显示数据插入成功在这里插入图片描述

1.3 验证

首先登陆Hadoop YARN上观察是否有MapReduce任务执行痕迹。
YARN Web UI: http://resourcemanager_host:8088/
在这里插入图片描述
然后登陆Hadoop HDFS浏览文件系统,根据Hive的数据模型,表的数据最终是存储在HDFS和表对应的文件夹下的。
HDFS Web UI: http://namenode_host:9870/
在这里插入图片描述

1.4 结论

➢ Hive SQL 语法和标准 SQL 很类似,使得学习成本降低不少。
➢ Hive 底层是通过 MapReduce 执行的数据插入动作,所以速度慢。
➢ 如果大数据集这么一条一条插入的话是非常不现实的,成本极高。
➢ Hive 应该具有自己特有的数据插入表方式,结构化文件映射成为表。

2 体验2:如何才能将结构化数据映射成为表?

2.1 背景

在Hive中,使用insert+values语句插入数据,底层是通过MapReduce执行的,效率十分低下。此时回到Hive的本质上:可以将结构化的数据文件映射成为一张表,并提供基于表的SQL查询分析。
假如,现在有一份结构化的数据文件,如何才能映射成功呢?在映射成功的过程中需要注意哪些问题?不妨猜想文件的存储路径?字段类型?字段顺序?字段之间的分隔符问题?

2.2 过程

在HDFS根目录下创建一个结构化数据文件user.txt,里面内容如下

1,zhangsan,18,beijing
2,lisi,25,shanghai
3,allen,30,shanghai
4,woon,15,nanjing
5,james,45,hangzhou
6,tony,26,beijing

在这里插入图片描述

在 hive 中创建一张表 t_user。注意: 字段的类型顺序要和文件中字段保持
一致。

create table t_user(id int,name varchar(255),age int,city varchar(255));

2.3 验证

执行数据查询操作,发现表中并没有数据。
猜想:难道数据文件要放置在表对应的HDFS路径下才可以成功?
在这里插入图片描述
再次执行查询操作,显示如下,都是null:在这里插入图片描述
表感知到结构化文件的存在,但是并没有正确识别文件中的数据。猜想:还需要指定文件中字段之间的分隔符?重建张新表,指定分隔符。

--建表语句 增加分隔符指定语句
create table t_user_1(id int,name varchar(255),age int,city varchar(255))
row format delimited
fields terminated by ',';
--关于分隔符语法 后续学习展开

#把user.txt文件从本地文件系统上传到hdfs
hadoop fs -put user.txt /user/hive/warehouse/itcast.db/t_user_1/

--执行查询操作
select * from t_user_1;

在这里插入图片描述
此时再创建一张表,保存分隔符语法,但是故意使得字段类型和文件中不一致。

--建表语句 增加分隔符指定语句
create table t_user_2(id int,name int,age varchar(255),city varchar(255))
row format delimited
fields terminated by ',';
#把user.txt文件从本地文件系统上传到hdfs
hadoop fs -put user.txt /user/hive/warehouse/itcast.db/t_user_2/

--执行查询操作
select * from t_user_2;

在这里插入图片描述
此时发现,有的列显示null,有的列显示正常。
name字段本身是字符串,但是建表的时候指定int,类型转换不成功;age是数值类型,建表指定字符串类型,可以转换成功。说明hive中具有自带的类型转换功能,但是不一定保证转换成功。

2.4 结论

要想在hive中创建表跟结构化文件映射成功,需要注意以下几个方面问题:
➢ 创建表时,字段顺序、字段类型要和文件中保持一致。
➢ 如果类型不一致,hive会尝试转换,但是不保证转换成功。不成功显示null。
➢ 文件好像要放置在 Hive 表对应的 HDFS 目录下,其他路径可以吗?
➢ 建表的时候好像要根据文件内容指定分隔符,不指定可以吗?

3 体验3:使用hive进行小数据分析如何?

3.1 背景

因为Hive是基于HDFS进行文件的存储,所以理论上能够支持的数据存储规模很大,天生适合大数据分析。假如Hive中的数据是小数据,再使用Hive开展分析效率如何呢?

3.2 过程

之前我们创建好了一张表t_user_1,现在通过Hive SQL找出当中年龄大于20岁的有几个。
在这里插入图片描述

3.3 验证

--执行查询操作
select count(*) from t_user_1 where age > 20;

3.4 结论

➢ Hive 底层的确是通过 MapReduce 执行引擎来处理数据的
➢ 执行完一个 MapReduce 程序需要的时间不短
➢ 如果是小数据集,使用 hive 进行分析将得不偿失,延迟很高
➢ 如果是大数据集,使用 hive 进行分析,底层 MapReduce 分布式计算,很爽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵广陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值