hive学习笔记-架构分析
来源:互联网 发布:深圳八爪网络 编辑:程序博客网 时间:2024/06/06 17:13
一.什么是hive?
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
这是hive官网对hive的描述,翻译成中文如下:
Apache Hive™数据仓库软件可帮助读取,写入和管理使用SQL驻留在分布式存储中的大型数据集。结构可以投影到已经存储的数据上。提供了一个命令行工具和JDBC驱动程序,用于将用户连接到Hive。
也就是说hive是用来为操作分布式存储提供类sql操作
那么,hive是如何操作数据的
1.Hive是为了简化用户编写MapReduce程序而生成的一种框架,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样。在这种情况下,就需要Hive这样的用户编程接口。Hive提供了一套类SQL的查询语言,称为HQL,而在创造Hive框架的过程中之所以使用SQL实现Hive是因为大家对SQL语言非常的熟悉,转换成本低,可以大大普及我们Hadoop用户使用的范围,类似作用的Pig就不是通过SQL实现的。
2.Hive是基于Hadoop的一个开源数据仓库系统,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,Hive可以把SQL中的表、字段转换为HDFS中的目录、文件。
3.Hive是建立在Hadoop之上的数据仓库基础构架、是为了减少MapReduce编写工作的批处理系统,Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce。Hive可以理解为一个客户端工具,将我们的sql操作转换为相应的MapReduce jobs,然后在Hadoop上面运行。
4.Hive可以认为是MapReduce的一个封装、包装。Hive的意义就是在业务分析中将用户容易编写、会写的Sql语言转换为复杂难写的MapReduce程序,从而大大降低了Hadoop学习的门槛,让更多的用户可以利用Hadoop进行数据挖掘分析。
这样我们就知道,hive就是把一个mapreduce程序封装成类sql语句(hql)
那么,hive是如何把sql语句解析成一个mapreduce程序
hive是通过编译器来解释hql语句,编译器的结构图如下:
编译器的执行流程如下:
整个过程分为六个阶段:
- Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
- 遍历AST Tree,抽象出查询的基本组成单元QueryBlock
- 遍历QueryBlock,翻译为执行操作树OperatorTree
- 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
- 遍历OperatorTree,翻译为MapReduce任务
- 物理层优化器进行MapReduce任务的变换,生成最终的执行计划
二.hive的体系架构
1.用户接口:包括shell命令、Jdbc/Odbc和WebUi,其中最常用的是shell这个客户端方式对Hive进行相应操作
3.Hive元数据库(MetaStore):Hive将表中的元数据信息存储在数据库中,如derby(自带的)、Mysql(实际工作中配置的),Hive中的元数据信息包括表的名字、表的列和分区、表的属性(是否为外部表等)、表的数据所在的目录等。Hive中的解析器在运行的时候会读取元数据库MetaStore中的相关信息。
( ps:在实际业务当中不用Hive自带的数据库derby,而要重新为其配置一个新的数据库Mysql,是因为derby这个数据库具有很大的局限性:derby这个数据库不允许用户打开多个客户端对其进行共享操作,只能有一个客户端打开对其进行操作,即同一时刻只能有一个用户使用它,自然这在工作当中是很不方便的,所以我们要重新为其配置一个数据库。)
4.Hadoop:Hive用HDFS进行存储,用MapReduce进行计算——-Hive这个数据仓库的数据存储在HDFS中,业务实际分析计算是利用MapReduce执行的。
三.hive的运行机制
三.hive的数据类型
数字类型
TINYINT
(1字节有符号整数,从-128
到127
)SMALLINT
(2字节有符号整数,从-32,768
到32,767
)INT / INTEGER(4字节有符号整数,从-2,147,483,648到2,147,483,647)
BIGINT
(8字节有符号整数,从-9,223,372,036,854,775,808
到9,223,372,036,854,775,807
)FLOAT
(4字节单精度浮点数)DOUBLE
(8位双精度浮点数)DOUBLE PRECISION ( DOUBLE的别名,仅供 Hive 2.2.0开始使用)
DECIMAL
- 在Hive 0.11.0中引入了38位精度
- Hive 0.13.0引入了用户定义的精度和尺度
NUMERIC
(相同DECIMAL
,从Hive 3.0.0开始)
日期/时间类型
TIMESTAMP
(注:只有从Hive 0.8.0开始)DATE
(注:只有从Hive 0.12.0开始)INTERVAL
(注:只有从Hive 1.2.0开始)
字符串类型
STRING
VARCHAR
(注:只有从Hive 0.12.0开始)CHAR
(注:只有从Hive 0.13.0开始)
杂项类型
BOOLEAN
BINARY
(注:只有从Hive 0.8.0开始)
复杂类型
- 数组:(
ARRAY<data_type>
注意:负数值和非常数表达式允许为 Hive 0.14。) - 地图:(
MAP<primitive_type, data_type>
注意:负数值和非常数表达式允许为 Hive 0.14。) - 结构:
STRUCT<col_name : data_type [COMMENT col_comment], ...>
- 联合:(
UNIONTYPE<data_type, data_type, ...>
注:只有从Hive 0.7.0开始。)
列类型
积分类型(TINYINT
, SMALLINT
, INT/INTEGER
, BIGINT
)
假定整数文字是INT
默认值,除非该数字超出了INT
这种情况,将其解释为BIGINT的范围,或者数字中存在以下后缀之一。
Type
Postfix
Example
TINYINT
Y
100Y
SMALLINT
S
100S
BIGINT
L
100L
- hive学习笔记-架构分析
- Hive学习笔记 --- Hive工作架构图
- Hive学习笔记2@Hive架构
- Hive学习笔记--Hive 优化
- Hive学习笔记--Hive JDBC
- HIVE学习笔记:初识HIVE
- motan学习笔记 二 motan架构分析
- HIVE的学习笔记
- Hive学习笔记汇总
- hive学习笔记1
- hive学习笔记
- HIVE学习笔记
- Hive学习笔记
- hive学习笔记
- hive学习笔记
- hive学习笔记
- Hive学习笔记
- hive学习笔记-转载
- 捕捉全局异常
- 第一次部署项目——是魔法吧
- opencv像素基本操作及图像遍历at
- UVA12506 字典树简单应用
- 多用户留言系统0.3-执行耗时
- hive学习笔记-架构分析
- ls -l 第一个字符详解
- Xshell脚本——0开始
- spring文件上传
- 时间轮
- spi调试
- 共轭函数
- 链接错误: "std::basic_string<char, std::char_traits<char>等错误
- ios内购功能是什么意思