欢迎投稿

今日深度:

HIVE,

HIVE,


目录

什么是Hive

Hive 特点

Hive的架构

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

hive执行流程


什么是Hive

 

1、Hive由Facebook实现并开源

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

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

4、提供了HQL(Hive SQL)查询功能

5、底层数据是存储在HDFS上

6、Hive的本质是将SQL语句转化为MapReduce任务执行

7、使不熟悉MapReduce的用户很方便地利用HQL处理和计算HDFS上的结构化数据,适用于离线的批量数据计算。

 

Hive依赖于HDFS存储数据,Hive将HQL转化成MapReduce任务执行,所以说Hive是基于Hadoop的一个数据仓储工具,实质上是一款基于HDFS的MapReduce计算框架,对存储在HDFS上的数据进行分析和管理。

为什么使用 Hive

直接使用MapReduce所面临的问题:

1、人员学习成本高

2、项目周几要求太短

3、MapReduce实现复杂的查询逻辑开发难度大。

为什么用Hive:

 1、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力

 2、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本

 3、更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

Hive 特点

优点:

1、可扩展性,横向扩张,Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

横向扩展:通过分担压力的方式扩展集群的规模

纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G

2、延展性,Hive支持自定义函数,用户可以根据自己的需求来实现自己的函数。

3、良好的容错性:可以保障节点出现问题,SQL语句仍可以完成执行。

缺点:

1、Hive不支持记录级别的增删改操作。但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)

2、Hive的查询延时很严重,因为MapReduce Job的启动过程消耗很长时间,所以不能用在交互查询系统中。

3、Hive不支持事务,(因为没有增删改,所以主要用来做OLAP(联机分析处理)而不是OLTP (联机事务处理,这就是数据处理的两大级别))。

Hive 和 RDBMS 的对比

总结: Hive 只适合用来做海量离线数 据统计分析,也就是数据仓库。

Hive的架构

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

1、用户接口: shell/CLI, jdbc/odbc, webui Command Line Interface

CLI,Shell终端命令行,采用交互形式使用Hive命令行与hive进行交互。

JDBC/ODBC,是Hive的基于JDBC操作提供的客户端,用户通过其连接至Hive Server服务

WebUI 通过浏览器访问Hive

2、跨语言服务 : thrift server 提供了一种能力,让用户可以使用多种不同的语言来操纵hive

 

Thrift是Facebook开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同编程语言调用Hive接口。

3、底层的Driver: 驱动器Driver,编译器Compiler,优化器Optimizer,执行器Executor

 

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

Hive的核心是驱动引擎,驱动引擎由4部分组成:

(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

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

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

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

4、元数据存储系统 : RDBMS MySQL

元数据,通俗地讲,就是存储在Hive中的数据的描述信息。

Hive中的元数据包括:表的名称,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录。

Metastore默认存在自带的Derby数据库中。缺点就是不适合多用户操作,并且数据存储不固定。数据库跟着Hive走,极度不方便管理。

解决方案:通常存我们自己创建的mysql库

hive执行流程

  HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数 据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。

1、Hive的存储结构包括数据库、表、分区、视图和表数据等。数据库、表、分区、视图等对应HDFS上的一个目录,表数据对应HDFS对应目录下的文件。

2、Hive中所有的数据都存储在HDFS中,没有专门的数据存储格式,因为Hive是读模式,可以支持TextFile SequenceFile,RCFile或者自定义格式。

3、只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,hive就可以解析数据。

Hive 的默认列分隔符:控制符 Ctrl + A,\x01 Hive 的

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

4、Hive 中包含以下数据模型:

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

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

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

partition:在HDFS中标为table目录下是子目录。

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

view:与传统数据库类似,只读,基于基本表创建。

5、Hive的元数据存储在RDBMS中,除元数据外的其他所有数据都基于HDFS存储。

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

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

删除外部表,删除元数据,不删除数据。

 

分区表:Hive可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同时表和分区也可以进一步划分为Buckets,分桶表的原理和MapReduce编程中的HashPartitioner的原理类似。

分区和分桶都是细化数据管理,但是分区表是手动添加区分,由于Hive是读模式,所以对添加进分区的数据不做模式校验

对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

划分规则:Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中

Bucket的好处:

 

set hive.enforce.bucketing=true 设置分桶参数

create table bucket_users(user_id int,item_id int,rating int,`timestamp` string)

clustered by (user_id)

into 4 buckets;

 

网上找的分桶的代码:

insert into table stu_buck

select id,name,score from student distribute by(id) sort by(id asc);

 

insert overwrite table stu_buck

select id,name,score from student distribute by(id) sort by(id asc);

 

insert overwrite table stu_buck

select id,name,score from student cluster by(id);

 

insert overwrite table stu_buck

select id,name,score from student cluster by(id) sort by(id); 报错,cluster 和 sort 不能共存

 

开始往创建的分通表插入数据(插入数据需要是已分桶, 且排序的)

可以使用distribute by(id) sort by(id asc)

排序和分桶的字段相同的时候也可以使用Cluster by(字段)

注意使用cluster by 就等同于分桶+排序(sort)

 

www.htsjk.Com true http://www.htsjk.com/hive/28933.html NewsArticle HIVE, 目录 什么是Hive Hive 特点 Hive的架构 Hive的内部架构由四部分组成: hive执行流程 什么是Hive   1、Hive由Facebook实现并开源 2、是基于hadoop的一个数据仓库工具 3、可以将结构化的数据...
相关文章
    暂无相关文章
评论暂时关闭