版权声明:本文为博主原创文章,未经博主允许不得转载。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。
网友评论