Hive节点及原理
目录:
一、hive简介
二、Hive语句的执行流程
三、hive和传统数据库的区别
一、Hive简介
1、什么是Hive:hive是一种基于hadoop的数据仓库,能够将结构化的数据映射成一张表,并提供HQL进行查询。其数据是存储在hdfs上,本质是将sql命令转化成MapReduce来执行。
2、Hive节点:用户接口,跨语言服务,元数据库,driver驱动
(1)用户接口:用户接口分为三种,第一种是cli,利用shell命令行操作;第二种是jdbc/odbc,使用sql进行操作;第三种是webui,在浏览器上访问hive。
(2)跨语言服务:一种软件框架,能让不同的语言调用hive的接口。
(3)元数据:存储hive数据的描述信息,例如:表名称和属性,表列和分区属性,表数据所在目录。这里的表属性一般指的是表是内部表还是外部表。
(4)驱动器Driver,编译器Compiler,优化器Optimizer,执行器Executor,Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行 计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行。
Hive 的核心是驱动引擎, 驱动引擎由四部分组成:
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
(2) 编译器:编译器是将语法树编译为逻辑执行计划
(3) 优化器:优化器是对逻辑执行计划进行优化
(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划
3、Hive数据组织:
database数据库
table表
external table外部表
patition分区
bucket分桶
https://www.cnblogs.com/frankdeng/p/9381934.html
二、Hive语句的执行流程
1、查看执行流程:
查看hive语句的执行流程:explain select ….from t_table …;
- 查看hive语句的执行流程:explain select ….from t_table …;
- 操作符是hive的最小执行单元
- Hive通过execmapper和execreducer执行MapReduce程序,执行模式有本地模式和分布式模式
- 每个操作符代表一个 HDFS 操作或者 MapReduce 作业
hive的操作符:
- Hive编译器的工作职责:
- Parser:将Hql语句转换成抽像的语法书(Abstract Syntax Tree)
- Semantic Analyzer:将抽象语法树转换成查询块
- Logic Plan Generator:将查询块,转换成逻辑查询计划
- Logic Optimizer:重写逻辑查询计划,优化逻辑执行计划
- Physical Plan Gernerator:将逻辑执行计划转化为物理计划
- Physical Optimizer:选择最佳的join策略,优化物理执行计划
2、hive执行流程:
执行步骤:
1. 用户提交查询等任务给 Driver。
2. Compiler 编译器获得该用户的任务计划Plan。
3. Compiler 编译器根据用户任务去 MetaStore元数据库 中获取需要的Hive的元数据信息。
4. Compiler编译器 得到元数据信息,对任务进行编译,先将 HiveQL 转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce), 最后选择最佳的策略。
5. 将最终的计划提交给Driver。
6. Driver 将计划 Plan 转交给 ExecutionEngine执行引擎 去执行,获取元数据信息,提交给 JobTracker作业跟踪器 或者 SourceManager源管理器 执行该任务,任务会直接读取 HDFS 中文件进行相应的操作。
7. 获取执行的结果。
8. 取得并返回执行结果。
参考博客:https://blog.51cto.com/14048416/2342658
三、hive和传统数据库的区别
1、Hive和传统数据库的区别
(1)表数据验证:传统数据库是写模式,hive是读模式。传统数据库在写入数据的时候就去检查数据格式,hive在读取数据的时候检查。因此,写时模式,查询快,读时模式数据加载快。
(2)hive不支持实时处理,并且对索引支持较弱。
(3)hive不支持行级插入、更新、删除和事务。
(4)hive数据结构复杂,例如:数组、映射、结构体。
1、数据存储位置。Hive是建立在Hadoop之上的,所有的Hive的数据都是存储在HDFS中的。而数据库则可以将数据保存在块设备或本地文件系统中。
2、数据格式。Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:列分隔符,行分隔符,以及读取文件数据的方法。数据库中,存储引擎定义了自己的数据格式。所有数据都会按照一定的组织存储。
3、数据更新。Hive的内容是读多写少的,因此,不支持对数据的改写和删除,数据都在加载的时候中确定好的。数据库中的数据通常是需要经常进行修改。
4、执行延迟。Hive在查询数据的时候,需要扫描整个表(或分区),因此延迟较高,只有在处理大数据是才有优势。数据库在处理小数据是执行延迟较低。
5、索引。Hive没有,数据库有
6、执行。Hive是MapReduce,数据库是Executor
7、可扩展性。Hive高,数据库低
8、数据规模。Hive大,数据库小