赞
踩
Hive优化的前提是:你先了解清楚MapReduce这个知识点,了解Map;shuffle;Reduce;在分布式中执行的过程。
Hive优化的本质很多都是基于MapReduce的优化(以及sql语法树的优化),本次先分享下基础的优化点:
● 抓取机制fetch
● 本地模式MR
● Join查询优化
● group by 优化: map 端聚合
● MR引擎并行度调整
● 执行计划
● 并行执行机制
● 严格模式
● 推测执行机制
● 重用JVM
是否有其他的方案处理小文件问题?(肯定有嘛)
其实这块不管是spark还是presto优化的原理本质都是一样
都会经过语法词法分析解析为AST语法树,然后进行相应的逻辑优化与物理优化
同上
set mapred.reduce.tasks=10;
create table a_1 as select * from a distribute by rand(123);
这样会将a表的记录,随机的分散到包含10个文件的a_1表中,再用a_1代替上面sql中的a表,则会用10个map任务去完成。每个map任务处理大于12M(几百万记录)的数据,效率肯定会好很多。
语法树生成的过程重点
1)parser:将sql解析为AST(抽象语法树),会进行语法校验,AST本质* * 还是字符串
2)Analyzer:语法分析,生成QB(query block)
3)Logicl Plan:逻辑执行计划解析,生成一堆Opertator Tree
4)Logicl Optimizer:进行逻辑执行计划优化,生成一堆Opertator Tree
5)Phsical plan:物理执行计划解析,生成 tasktree
6)Phsical Optimizer:进行物理执行计划优化,生成 t优化后tasktree,该任务即是在集群上执行的作业任务
六步将普通的sql映射成了作业任务。重点是 逻辑执行计划优化和物理执行计划优化
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。