关于HIve的运行原理分析和日志解析清洗思路(一)

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.推测执行 (参数控制)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值