赞
踩
Hive是基于hadoop的数据仓库工具,将结构化的数据映射为一张表,提供类sql的查询功能。
本质-- SQL解析,将HQL转为MapReduce执行过程。底层的执行引擎有:MapReduce、Tez、Spark
C/S模式。
Client:
Client端有JDBC/ODBC和Thrift Client,可远程访问Hive。
可以通过shell脚本的方式访问,或者通过Thrift协议,按照平时编写JDBC的方式完成对Hive的数据操作。
Server:CLI、Thrift Server、HWI(Hive web Interface)、Driver、Metastore
Driver:
解析输入的sql,抽象成语法树,再转成逻辑计划,然后进行优化,生成物理执行计划(序列化反序列化,UDF函数),交给Execution执行引擎-->MR Job/Spark Job。
(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。
优化器:基于规则的优化:
列过滤:去除查询中不需要的列
行过滤:Where条件判断等在TableScan阶段就进行过滤,利用Partition信息,只读取符合条件的Partition
谓词下推:减少后面的数据量(比如两个表join时,通过优先执行where过滤掉不符合的条件。。后面详细学习)
join方式
Metastore:
存储和管理元数据:Derby(内置 )、Mysql;
1,用户提交查询任务给Driver
2,Driver为查询操作创建session handler,发送查询操作到compiler生成execute plan
3,compiler从metastore获取本次查询需要的元数据,用于后续对抽象查询树中的表达式进行类型检查,以及基于查询谓词修剪分区;
4,compiler基于元数据信息对task进行编译
5,编译器将HSQL转为抽象语法树->查询块->逻辑查询plan->重写逻辑查询plan->生成物理查询plan(MR),并选择最佳策略。
6,Driver将plan发送给ExecutionEngine执行,元数据信息提交到JobTracker或者yarn的RsourceManager执行,task直接读取到HDFS中进行相应的操作。
7,获取执行结果。
8,取得并返回执行结果。
⚠️无论底层的计算引擎是什么,一条SQL在Hive中的逻辑计划都是一样的,不同的计算引擎生成的物理计划就会有所差别。
High Availablity——解决端口不响应或者进程丢失问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。