目录
- 简介
- 优点和特点
- 元数据管理
- 命令窗口模式
- 结语
简介
Hive是基于Hadoop的一个数据仓库。可以将结构化的文件映射为一张数据库表,并提供简单的SQL查询功能。它的指令和sql十分类似。如果有SQL经验,学起来会更加轻松。Hive可以将SQL语句转化为MapReduce任务进行运行。
优点和特点
- 提供了一个简单的优化模型;
- HQL类SQL语法,简化了MR的开发;
- 支持在不同的计算框架上运行;
- 支持在HDFS和HBase上临时查询数据;
- 支持用户自定义函数、格式;
- 成熟的JDBC和ODBC驱动程序,用于ETL和BI;
BI:Business Intelligenc。为商业提供一切智能化操作、判断与管理的手段都可以看做是BI。当然也包括AI智能;
ETL:Extraction-Transformation-Loading。即为数据抽取、转换和加载。是BI中最重要的一个环节。 - 稳定可靠的批量处理。Hive查询数据的速度非常快。但是当对数据进行增删改时却并没有那么迅速;
- 有庞大活跃的社区。
大家可以看下这两张图上的代码。第一个图是用java代码写的实现MapReduce。第二种图中的代码是用Hive实现的MapReduce。你们觉得哪一个的运行效率更快?
其实单从运行效率来看,用java写的会更加快速。简单来说,是因为,虽然Hive的代码看上去更少,但其实在它运行时仍然要调用图一中的java代码。Hive就像是一个类调用了图一中的方法,因此,即便代码量减少了,但工作步骤却增加了。
然而在实际的工作中,对我们程序员来说,还是Hive代码使用的更加普遍。毕竟代码量大大减少,减少了工作的负担,只有少数情况才能用到java实现MapReduce.
Hive发展的历史版本:
07年8月 – 始于Facebook
13年5月 – 0.11 Stinger Phase 1 ORC HiveServer2
13年10月 – 0.12.0 Stinger Phase 2 - ORC improvement
14年4月 – Hive 0.13.0 as Stinger Phase 3
14年11月 – Hive 0.14.0
15年2月 – Hive 1.0.0
15年5月 – Hive 1.2.0
16年2月 – Hive 2.0.0 (添加 HPLSQL, LLAP)
16年6月 – Hive 2.1.0
本篇博文所使用的是1.1.0版本的。
元数据管理
- Hive的元数据管理是记录数据仓库中模型的定义、各层级间的映射关系。
- 把数据存储在关系数据库中,默认Derby,轻量级内嵌SQL数据库。Derby非常适合测试和演示,存储在.metastore_db目录中。而实际生产,Hive一般吧数据村塾在Mysql中。
- Hcatalog:将Hive元数据共享给启动应用程序
命令窗口模式
Hive也有自己的窗口提供指令的输入。它有两种工具:Beeline和Hive命令行(CLI);两种模式:命令行模式和交互模式。接下来以Beeline为例做一些演示。
首先启动Beeline,在命令行输入:
hiveserver2 start
注:hiveserver2为Beeline,hiveserver1为CLI。
启动后,新打开一个窗口,在进入Beeline命令行之前我们还要进行一个操作:赋权。当我们对表格进行增删改查等操作的时候,可能会出现权限不够的情况而报错,需要先进行赋权。我这里为了方便直接对根目录赋权。大家也可以根据自己需要选择相应目录赋权:
hadoop fs -chmod -R 777 /
登录50070端口可以查看根目录下的文件都已赋权成功。然后启动hBeeline:
beeline -u "jdbc:hive2://localhost:10000"
建立表格:
create table test1(name String);
和SQL建表语句有所不同。这里数据类型为String(sql中为varchar),而且不需要设置长度。
创建成功后,可以通过**!table**来查看创建信息:
数据的增加:
insert into test1 values('sam');
和sql的语句一样。不过值得一提的是用hive插入数据的效率远远无法和SQL相比。它插入数据的效率非常慢。从下图可以看出插入一个简单的数据用了将近34秒的时间。之所以这样是因为hive本身是一个数据存储仓库,主要是用来进行查询使用,所以它的查询速度则会非常快,其他的功能倒不尽人意。
数据的查询:
select * from test1;
语句和SQL一样,但是它的查询速度非常快,这里只用了0.236秒。所以Hive更多的是当做查询工具使用。
表的删除:
drop table test1;
删除后查询一下,发现test1表没了,删除成功
退出操作窗口:
!quit
结语
本文简单介绍了下Hive的一些入门知识,后续还会有更多的补充,也希望能和更多的伙伴们一起学习,共同进步!