HIVE原理:
Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再Hadoop平台上运行;Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。本质就是Hadoop的目录文件,达到了元数据与数据存储分离的目的;Hive本身不存储数据,它完全依赖HDFS和MapReduce
Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些 Key 建立索引(hive不存储数据,因此没有索引)
HQL----》转换成mapreduce------》提交任务给hadoop(读取,计算)
Hive是如何将SQL转化为MapReduce任务的,整个编译过程分为六个阶段:
1.SQL词法,语法解析,形成抽象语法树AST Tree:
语法规则文件,定义好词法和语法替换规则即可,Antlr完成了词法分析、语法分析、语义分析、中间代码生成的过程。
2.SQL基本组成单元QueryBlock:
AST Tree仍然非常复杂,不够结构化,不方便直接翻译为MapReduce程序,AST Tree转化为QueryBlock就是将SQL进一部抽象和结构化。
QueryBlock是一条SQL最基本的组成单元,包括三个部分:输入源,计算过程,输出。简单来讲一个QueryBlock就是一个子查询。
3.生成逻辑操作符Operator
Hive最终生成的MapReduce任务,Map阶段和Reduce阶段均由OperatorTree组成。基本的操作符包括TableScanOperator,SelectOperator,FilterOperator,JoinOperator,GroupByOperator,ReduceSinkOperator
4.逻辑层优化器:
大部分逻辑层优化器通过变换OperatorTree,合并操作符,达到减少MapReduce Job,减少shuffle数据量的目的。
5.OperatorTree生成MapReduce Job的过程
遍历
总结为:
1. Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
2. 遍历AST Tree,抽象出查询的基本组成单元QueryBlock
3. 遍历QueryBlock,翻译为执行操作树OperatorTree
4. 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
5. 遍历OperatorTree,翻译为MapReduce任务
6. 物理层优化器进行MapReduce任务的变换,生成最终的执行计划
=====================================================================================================
HIVE优化:
1.解决数据倾斜问题(慎用count(distinct),count(distinct)容易产生倾斜问题。),找到造成倾斜的key
2.设置合理的map reduce 的task数量 (参数)
3.合并小文件(使用Sequencefile作为表存储格式, 减少reduce的数量, 使用hadoop archive命令把小文件进行归档, 参数)
4.列裁剪,分区裁剪
5.存储格式选择
6.MAP JOIN (小表读入内存,上传至Distributed Cache中,避免了shuffle)
7.模式选择(本地模式 ,并行模式 ,严格模式 参数控制)
8.JVM重用 (减少JVM的启动过程, 参数)
9.推测执行 (参数控制)
hivesql解析过程详解 hive sql解析过程
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MapReduce Sql解析过程 mapreduce详解
首先从左到右,数据从HDFS中流入,其中inputsplit为大数据源,到了map有一个map的接口,把大数据源进行切割成一个一个的map,这一步需要我们来进行开发的,到后面的reduce也是,其他的为框架帮我们完成,会把数据填充到内存,即buffer in memory,默认为100M,阈值为80M,当数据溢出时,进行封闭,将数据从内存写入到磁盘中,而且中是按照key进行排序,概要MapRedu
MapReduce Sql解析过程 Mapreduce原理 Mapreduce详解 Mapreduce基础 Mapreduce实践