Hive基本简介

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。

猜你喜欢

转载自www.cnblogs.com/cugv/p/12970257.html