Hive知识梳理

2019-01-15  本文已影响0人  Moon_魔宽

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/1ca9fbfe2fbb

【Hive学习路线图】

【什么是Hive】

1、Facebook实现并开源

2、是基于Hadoop的一个数据仓库工具

3、将结构化的数据映射为一张数据库表

4、提供HQL(Hive SQL)查询

5、底层数据存储在HDFS上

6、本质是将SQL语句转换为MR任务运行

7、适用于离线批量数据计算、统计分析,也就是数据仓库,使不熟悉MR的用户很方便利用HQL处理和计算HDFS上结构化数据

【特点】

1、Hive启动延时很长,不适用交互查询

2、不支持事务(没有增删改,所以主要应用OLAP联机分析处理,而非OLTP联机事务处理)

【内部架构】

Hive内部架构由四部分组成:

1、用户接口

CLI,Shell (command line interface)终端命令行,采用交互式形式使用Hive命令行与Hive交互(调试、生产、学习)

JDBC/ODBC,是Hive基于Java或C操作提供的客户端,用户(运维、开发、应用)通过其连接至Hive Server服务

Web UI,通过浏览器访问

2、跨语言服务

thirft server可以用来进行可扩展且跨语言的服务,可以让用户使用不同的编程语言来调用Hive的接口。

3、底层的Driver

Driver组件完成HQL查询语句从词法分析、语法分析、编译、优化及生成逻辑执行计划的生成。生成的逻辑执行计划存储在HDFS中,并由MR调用执行。

Hive的核心是驱动引擎,这与RDBMS很像,由四部分组成:

(1)解释器:将Hive SQL语句转换为抽象语法树(AST)

(2)编译器:将语法树编译为逻辑执行计划

(3)优化器:对逻辑执行计划进行优化

(4)执行器:调用底层运行框架执行逻辑执行计划

执行流程:Hive Sql通过命令行或客户端提交,经过compiler编译器,运用Metastore中的元数据进行类型检测和语法分析,生成一个逻辑方案,通过优化,产生一个MR任务。

4、元数据存储

元数据是存储在Hive中的数据描述信息,包括:表名、列、分区及其属性、表的属性、数据所在目录等。

Hive自带默认会存将Metastore存在Derby数据库中。由于Derby只允许一个会话连接,不适合多用户操作,不适用生产环境。所以生产常用mysql作为元数据库,Hive和Mysql之间通过MetaStore服务交互。

【数据组织】

1、Hive存储结构包括数据库、表、视图、分区、表数据

数据库、表、分区等都都对应HDFS上的一个目录。表数据对应HDFS对应目录下的文件。

2、Hive中所有数据都存储在HDFS上,可支持TextFile、SequenceFile、RCFile、PQ或自定义格式,目前生产采用RCFile

3、Hive表分隔符

Hive默认列分隔符:Ctrl+A,\001

默认行分隔符:换行符 \n

4、数据模型

database:在HDFS中表现为{hive.metastore.warehouse,dir}目录下一个文件

table:在HDFS中表现为所属database目录下的一个文件夹

external table:与table类似,不过其数据存放位置可以指定任意HDFS目录

partition:在HDFS中表现为table目录下的子目录

bucket:在HDFS中表现为同一个表目录或者分区目录下根据某个字段值进行hash散列之后的多个文件

view:与传统数据库类似,只读

5、除元数据存储在mysql中,其他所有数据都存放在HDFS上

6、Hive表分为内部表、外部表、分区表和Bucket表

【内部表和外部表区别】

删除内部表,表元数据和数据均删除

删除外部表,表元数据删除,数据保留

使用外部表的场景是针对一个数据集有多个不同的 Schema

【分区表和分区桶】

Hive数据表可以根据某些字段进行分区操作,细化数据管理,提高查询性能。

表和分区可以进一步被划分为Buckets,分桶表的原理类似MR编程中的HashPatrion。

上一篇 下一篇

猜你喜欢

热点阅读