Hive是对数据仓库进行管理和分析数据的工具。但是大家不要被“数据仓库”这个词所吓倒,数据仓库是很复杂的东西,但是如果你会MYSQL或者MSSQL,就会发现Hive是那么的简单,简单到甚至不用学就可以使用Hive做出业务所需要的东西。
但是Hive和MYSQL毕竟不同,执行原理、优化方法,底层架构都完全不相同。 大数据离线分析使用Hive已经成为主流,基于工作中Hive使用的经验,我整理了这个入门级别的文章,希望能给想入门的同学提供一些帮助。
一、Hive简介
Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会。
官网定义:
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL.
Hive是一种用类SQL语句来协助读写、管理那些存储在分布式存储系统上大数据集的数据仓库软件。
Hive的几个特点
Hive最大的特点是通过类SQL来分析大数据,而避免了写MapReduce程序来分析数据,这样使得分析数据更容易。
数据是存储在HDFS上的,Hive本身并不提供数据的存储功能
Hive是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如MySQL)。
数据存储方面:它能够存储很大的数据集,并且对数据完整性、格式要求并不严格。
数据处理方面:因为Hive语句最终会生成MapReduce任务去计算,所以不适用于实时计算的场景,它适用于离线分析。
二、Hive架构
Hive的核心
Hive的核心是驱动引擎,驱动引擎由四部分组成:
解释器:解释器的作用是将HiveSQL语句转换为语法树(AST)。
编译器:编译器是将语法树编译为逻辑执行计划。
优化器:优化器是对逻辑执行计划进行优化。
执行器:执行器是调用底层的运行框架执行逻辑执行计划。
Hive的底层存储
Hive的数据是存储在HDFS上的。Hive中的库和表可以看作是对HDFS上数据做的一个映射。所以Hive必须是运行在一个Hadoop集群上的。
Hive语句的执行过程
Hive中的执行器,是将最终要执行的MapReduce程序放到YARN上以一系列Job的方式去执行。
Hive的元数据存储
Hive的元数据是一般是存储在MySQL这种关系型数据库上的,Hive和MySQL之间通过MetaStore服务交互。
元数据项 说明
Owner 库、表的所属者
LastAccessTime 最后修改时间
Table Type 表类型(内部表、外部表)
CreateTime 创建时间
Location 存储位置
表的字段信息
Hive客户端
Hive有很多种客户端。
cli命令行客户端:采用交互窗口,用hive命令行和Hive进行通信。
HiveServer2客户端:用Thrift协议进行通信,Thrift是不同语言之间的转换器,是连接不同语言程序间的协议,通过JDBC或者ODBC去访问Hive。
HWI客户端:hive自带的一个客户端,但是比较粗糙,一般不用。
HUE客户端:通过Web页面来和Hive进行交互,使用的比较多。
三、基本数据类型
Hive支持关系型数据中大多数基本数据类型,同时Hive中也有特有的三种复杂类型。
下面的表列出了Hive中的常用基本数据类型:
数据类型 长度 备注
Tinyint 1字节的有符号整数 -128~127
SmallInt 1个字节的有符号整数 -32768~32767
Int 4个字节的有符号整数 -2147483648 ~ 2147483647
BigInt 8个字节的有符号整数
Boolean 布尔类型,true或者false true、false
Float 单精度浮点数
Double 双精度浮点数
String 字符串
TimeStamp 整数 支持Unix timestamp,可以达到纳秒精度
Binary 字节数组
Date 日期 0000-01-01 ~ 9999-12-31,常用String代替
--- --- ---
四、DDL语法
创建数据库
创建一个数据库会在HDFS上创建一个目录,Hive里数据库的概念类似于程序中的命名空间,用数据库来组织表,在大量Hive的情况下,用数据库来分开可以避免表名冲突。Hive默认的数据库是default。