目录

  • 简介
  • 优点和特点
  • 元数据管理
  • 命令窗口模式
  • 结语


简介

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。

hive给用户视图赋权 hive给表赋权_大数据

启动后,新打开一个窗口,在进入Beeline命令行之前我们还要进行一个操作:赋权。当我们对表格进行增删改查等操作的时候,可能会出现权限不够的情况而报错,需要先进行赋权。我这里为了方便直接对根目录赋权。大家也可以根据自己需要选择相应目录赋权:

hadoop fs -chmod -R 777 /

hive给用户视图赋权 hive给表赋权_Hadoop_02


登录50070端口可以查看根目录下的文件都已赋权成功。然后启动hBeeline:

beeline -u "jdbc:hive2://localhost:10000"

hive给用户视图赋权 hive给表赋权_hive给用户视图赋权_03

建立表格:

create table test1(name String);

和SQL建表语句有所不同。这里数据类型为String(sql中为varchar),而且不需要设置长度。

hive给用户视图赋权 hive给表赋权_Hive_04


创建成功后,可以通过**!table**来查看创建信息:

hive给用户视图赋权 hive给表赋权_SQL_05


数据的增加:

insert into test1 values('sam');

和sql的语句一样。不过值得一提的是用hive插入数据的效率远远无法和SQL相比。它插入数据的效率非常慢。从下图可以看出插入一个简单的数据用了将近34秒的时间。之所以这样是因为hive本身是一个数据存储仓库,主要是用来进行查询使用,所以它的查询速度则会非常快,其他的功能倒不尽人意。

hive给用户视图赋权 hive给表赋权_Hive_06

数据的查询:

select * from test1;

语句和SQL一样,但是它的查询速度非常快,这里只用了0.236秒。所以Hive更多的是当做查询工具使用。

hive给用户视图赋权 hive给表赋权_Hadoop_07


表的删除:

drop table test1;

删除后查询一下,发现test1表没了,删除成功

hive给用户视图赋权 hive给表赋权_大数据_08


退出操作窗口:

!quit

结语

本文简单介绍了下Hive的一些入门知识,后续还会有更多的补充,也希望能和更多的伙伴们一起学习,共同进步!