前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive 基本架构

Hive 基本架构

作者头像
Tim在路上
发布2020-08-04 22:18:43
1.3K0
发布2020-08-04 22:18:43
举报
文章被收录于专栏:后台技术底层理解

hive是一个著名的离线处理的数据仓库,可以通过类SQL语言轻松的访问大量的数据集,也可以访问HDFS中的文件,但是其底层的实现是MapReduce,所以具有较高的可扩展性。但是hive不是RDBMS数据库。

hive具有明显的自己特色,它不支持数据更新,不支持事务和索引,但是具有了更小的分区---桶。同时其具有了并发处理大数据文件的能力。

我们可以认为Hive是MapReduce的翻译器。
Hive的缺点

HQL并非完全是SQL语法,很多复杂的语法无法实现,比如join操作,只支持等值连接,迭代的算法无法实现。

同时hive生成的mapReduce效率不会太高,基本上一个操作生成一个Map Reduce,一条语句可能生成很多Map Reduce ,一般可以使用Tez进行优化,但是效率要求高的地方一般需要自己写MapReduce来实现。

Hive架构

Hive和mySQL一样是C/S架构

client端包括 JDBC/ODBC Client和Thrift Client两类

Server端包括 CLI Thrift Server Metastore WUI Driver

Driver

Driver 每一个Hive服务都需要调用Driver来完成HQL语句的翻译和执行。通俗地说,Driver就是HQL编译器,它解析和优化HQL语句,将其转换成一个Hive Job(可以是MapReduce,也可以是Spark等其他任务)并提交给Hadoop集群。

Metastore

Metastore是Hive元数据的存储地。在功能上Metastore分为两个部分:服务和存储.hive服务和存储部署的三种模式:

1.内嵌模式 内嵌模式是Hive Metastore的最简单的部署方式,使用Hive内嵌的Derby数据库来存储元数据。但是Derby只能接受一个Hive会话的访问,试图启动第二个Hive会话就会导致Metastore连接失败。

2.本地模式 本地模式是Metastore的默认模式(懒人专用模式)。该模式下,单Hive会话(一个Hive 服务JVM)以组件方式调用Metastore和Driver。我们可以采用MySQL作为Metastore的数据库。下面列出部署细节:

在hive-site.xml中设置MySQL的Connection URL、用户名和密码以及ConnectionDriverName; 将MySQL的JDBC驱动Jar文件放到Hive的lib目录下。

3.远程模式 远程模式将Metastore分离出来,成为一个独立的Hive服务(Metastore服务还可以部署多个)。这样的模式可以将数据库层完全置于防火墙后,客户就不再需要用户名和密码登录数据库,避免了认证信息的泄漏。

  • hive.metastore.local false为远程模式
  • hive.metastore.uris 远端模式下Metastore的URI列表

hive查询过程

就如上文所示一样Hive类似与hiveQL转化的Mapreduce的语言解释器。

用户提交hiveQL会被提交给驱动器driver,驱动器将语句交给解释器进行分析,解释器compiler根据语句去元数据集metastore请求需要的数据,元数据集给解释器返回数据,解释器将分析好的任务再次返回启动器,驱动器给执行器发布执行命令。最后执行器根据得到的执行机会去和hadoop集群交互。

MapReduce实现HiveQL

1.mapreduce实现join

join.png

实现的过程是在Map阶段将来自哪个表的数据打上标签,在reduce阶段,按标签区分不同的列,按key来进行数据的合并。

2.MapReduce实现groupy

groupby.png

在map阶段将字段组合为key值,将value值设为统计的次数,在reduce阶段直接进行合并。

3.Mapreduce实现distinct

1distinct.png

当只有一个distinct字段时,如果不考虑Map阶段的Hash GroupBy,只需要将GroupBy字段和Distinct字段组合为map输出key,利用mapreduce的排序,同时将GroupBy字段作为reduce的key,在reduce阶段保存LastKey即可完成去重. 类似与groupby但是不执行合并,只是取最后一个数即可。

了解了MapReduce实现SQL基本操作之后,我们来看看Hive是如何将SQL转化为MapReduce任务的,整个编译过程分为六个阶段: Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree 遍历AST Tree,抽象出查询的基本组成单元QueryBlock 遍历QueryBlock,翻译为执行操作树OperatorTree 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量 遍历OperatorTree,翻译为MapReduce任务 物理层优化器进行MapReduce任务的变换,生成最终的执行计划

Hive数据模型

clipboard.png

分区表: 分区:把数据放在不同的磁盘文件中,就认为是不同的分区,数据库对不同的分区会进行单独的管理,优化,最终的目的是加快我们数据查询的速度,在hive中,把不同的分区分在表中不同的子文件夹中.

桶表: 桶表和分区表的区别在于:不是按照业务字段来进行分区,对里面的记录做一个hash,记录做完hash之后就没有规律了,可以简单的认为数据做完hash之后都不相同,然后我们让数据进行模10,数据就被分成了十份,模100就被分成100份,因为hash值几乎各不相同,所以模后的结果,分成10份或者100份,每一份的数据量几乎是一样多的,当你hash之后然后模一个数字,分的那些数据量,每一份应该是差不多的,如果这样的话,我们把这样的数据存起来,模5,10,100 模的这个数字叫做桶,模几就分成几个桶,桶实际上就是模的数字,我们的记录就被划分到这个桶里面了,那么hive在进行查询的时候就会按照5个桶或者10个桶来进行处理,这样的话,好处是各个map运行的时间差不多.

数据类型

Hive发展

目前Hive的底层已经变为了Tez,Tez相比与MapReduce有很多的优势,提供了多种算子,可以将多个作业合并为一个作业,减少了IO,充分利用了内存的资源。

Impala

底层计算引擎不再采用MR,而是使用与商用并行关系数据库 类似的分布式查询引擎;

Impala可直接处理存储在HDFS上的数据,并将结果集再次写 入HDFS;

具有良好的扩展性和容错性;

适合快速交互式查询

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hive的缺点
  • Hive架构
  • MapReduce实现HiveQL
  • Hive数据模型
  • Hive发展
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档