Hive体系架构

参考:
Hive: 基于 Hadoop 的数据仓库工具
hive体系结构和执行流程

1、Hive产生背景

  • MapReduce编程的不便性
  • HDFS上的文件缺少Schema(表名,名称,ID等,为数据库对象的集合)

2、Hive是什么

Hive的使用场景是什么?

基于Hadoop做一些数据清洗啊(ETL)、报表啊、数据分析
可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。

  • 由Facebook开源,最初用于解决海量结构化的日志数据统计问题
  • 构建在Hadoop之上的数据仓库
  • Hive定义了一种类SQL查询语言:HQL(类似SQL但不完全相同)
  • 通常用于进行离线数据处理(早期采用MapReduce)
  • 底层支持多种不同的执行引擎(现在可以直接把Hive跑在Spark上面)

Hive底层的执行引擎有:MapReduce、Tez、Spark

3、Hive 特点

  • Hive 最大的特点是 Hive 通过类 SQL 来分析大数据,而避免了写 MapReduce 程序来分析数据,这样使得分析数据更容易
  • Hive 是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如 MySQL)
  • Hive 本身并不提供数据的存储功能,数据一般都是存储在 HDFS 上的(对数据完整性、格式要求并不严格)
  • Hive 很容易扩展自己的存储能力和计算能力,这个是继承自 hadoop 的(适用于大规模的并行计算)
  • Hive 是专为 OLAP(在线分析处理) 设计,不支持事务

4、Hive体系架构

Hive是C/S模式

客户端: JDBC/ODBC Thrift Client 通过服务访问Hive
Client端有JDBC/ODBC和Thrift Client,可远程访问Hive
可以通过shell脚本的方式访问,或者通过Thrift协议,按照平时编写JDBC的方式完成对Hive的数据操作

Server:CLI、Thrift Server、HWI(Hive web Interface)、Driver、Metastore

  • 其中CLI、Thrift Server、HWI是暴露给Client访问的独立部署的Hive服务
  • Driver、Metastore是Hive内部组件,Metastore还可以供第三方SQL on Hadoop框架使用
  • beeine(Hive 0.11引入),作为Hive JDBC Client访问HiveServer2,解决了CLI并发访问问题

Driver:
输入了sql字符串,对sql字符串进行解析,转化程抽象语法树,再转化成逻辑计划,然后使用优化工具对逻辑计划进行优化,最终生成物理计划(序列化反序列化,UDF函数),交给Execution执行引擎,提交到MapReduce上执行(输入和输出可以是本地的也可以是HDFS/Hbase)

Metastore:
Metastore进行元数据管理:Derby(内置 )、Mysql
Derby:Derby只接受一个Hive的会话访问
Mysql:Hive跑在Hadoop之上的,Mysql进行主备(定时同步操作)

Hive体系架构

a: Parsed Logical Plan 执行逻辑计划
b: Analyzed Logical Plan 分析逻辑计划
c: Optimized Logical Plan 优化逻辑计划
d: Physical Plan 得到物理计划,进行执行

Hive 架构

由上图可知,hadoop 和 mapreduce 是 hive 架构的根基。

MetaStore:存储和管理Hive的元数据,使用关系数据库来保存元数据信息。
解释器和编译器:将SQL语句生成语法树,然后再生成DAG形式的Job链,成为逻辑计划

优化器:只提供了基于规则的优化

  • 列过滤:去除查询中不需要的列
  • 行过滤:Where条件判断等在TableScan阶段就进行过滤,利用Partition信息,只读取符合条件的Partition
  • 谓词下推:减少后面的数据量
  • Join方式
    。 Map端join: 调整Join顺序,确保以大表作为驱动表,小表载入所有mapper内存中
    。 shuffle join:按照hash函数,将两张表的数据发送给join
    。对于数据分布不均衡的表Group by时,为避免数据集中到少数的reducer上,分成两个map-reduce阶段。第一个阶段先用Distinct列进行shuffle,然后在reduce端部分聚合,减小数据规模,第二个map-reduce阶段再按group-by列聚合。
    。 sort merge join:排序,按照顺序切割数据,相同的范围发送给相同的节点(运行前在后台创建立两张排序表,或者建表的时候指定)
    。 在map端用hash进行部分聚合,减小reduce端数据处理规模。

执行器:执行器将DAG转换为MR任务。执行器会顺序执行其中所有的Job,如果Job不存在依赖关系,采用并发的方式进行执行,

5、Hive sql的执行流程

Hive sql的执行流程

以下为执行说明:
1.执行查询:hive界面如命令行或Web UI将查询发送到Driver(任何数据库驱动程序如JDBC、ODBC,等等)来执行。

2.获得计划:Driver根据查询编译器解析query语句,验证query语句的语法,查询计划或者查询条件。

3.获取元数据:编译器将元数据请求发送给Metastore(任何数据库)。

4.接受元数据:Metastore将元数据作为响应发送给编译器。

5.发送:编译器检查要求和重新发送Driver的计划。到这里,查询的解析和编译完成。

6.执行计划:Driver将执行计划发送到执行引擎。

7.执行Job:hadoop内部执行的是mapreduce。在执行引擎发送任务的同时,对hive的元数据进行相应操作。

8.得到执行结果:执行引擎接收数据节点(data node)的结果。

9.返回结果:执行引擎发送这些合成值到Driver。

10.返回最终结果:Driver将结果发送到hive接口。

6、数组组织格式

image.png

image.png
  • Table:每个表存储在HDFS上的一个目录下
  • Partition(可选):每个Partition存储再Table的子目录下
  • Bucket(可选):某个Partition根据某个列的hash值散列到不同的Bucket中,每个Bucket是一个文件

用户可以指定Partition方式和Bucket方式,使得在执行过程中可以不用扫描某些分区。看上去Hive是先指定Partition方式,再在相同的Partition内部调用hash函数;

7、Hive优化策略

  1. 去除查询中不需要的column---列过滤

  2. Where条件判断等在扫描表阶段就进行过滤---谓词下压

  3. 利用Partition信息,只读取符合条件的Partition

  4. Map端join,调整Join顺序,以大表作驱动,小表载入所有mapper内存中

  5. 对于数据分布不均衡的表Group by时,为避免数据集中到少数的reducer上,分成两个map-reduce阶段。第一个阶段先用Distinct列进行shuffle,然后在reduce端部分聚合,减小数据规模,第二个map-reduce阶段再按group-by列聚合。

  6. 在map端用hash进行部分聚合,减小reduce端数据处理规模。

8、Hive的部署方式? 三种

1、内嵌模式:使用内嵌的Derby数据库作为存储元数据,Derby只能接受一个Hive会话的访问,不能用于生产; hive服务、metastore服务、derby服务运行在同一个进程中。

2、本地模式:本地安装mysql,替代derby存储元数据,是一个多用户多客户端的模式,作为公司内部使用Hive;hive服务和metastore服务运行在同一个进程中,mysql数据库则是单独的进程,可以同一台机器,也可以在远程机器上。

3、远程模式(Remote): 远程安装mysql 替代derby存储元数据;Hive服务和metastore在不同的进程内,也可能是不同的机器;

将Metastore分离出来,成为一个独立的Hive服务
可以将Mysql数据库层完全置于防火墙后,不再暴露数据库用户名和密码,避免认证信息的泄漏

9、Hive支持的主要数据格式?

文本文件、序列化文件(行)、parquet文件(列)、RCFile(列)、ORC(列)、Avro File(行)

10、Hive有索引吗?

Hive是支持索引的,但是很少被使用
索引表不会自动rebuild,如果表有数据新增或删除,那么必须手动rebuild索引表数据
索引表本身会非常大
Hive索引的使用过程比较繁琐

Hive的两种索引:
位图索引:普遍用于去重后值比较少的列
紧凑索引:存储每个值的HDFS块号

附件:
hiveServer2 和 metastore的一点解读。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容