文章目录
- 优化点
- 1. 抓取机制
- 2. 本地模式 mapreduce (小文件10倍性能的提升)
- Join查询优化(重点记住)
- 4. group by 优化: map端聚合 (预聚合+负载均衡)(重点记住)
- 5. MapReduce引擎并行度调整
- 6. 执行计划
- 7. 并行执行
- 8. 严格模式_ 推测执行
- 总结
Hive优化的前提是:你先了解清楚MapReduce这个知识点,了解Map;shuffle;Reduce;在分布式中执行的过程。
Hive优化的本质很多都是基于MapReduce的优化(以及sql语法树的优化),本次先分享下基础的优化点:
优化点
● 抓取机制fetch
● 本地模式MR
● Join查询优化
● group by 优化: map 端聚合
● MR引擎并行度调整
● 执行计划
● 并行执行机制
● 严格模式
● 推测执行机制
● 重用JVM
1. 抓取机制
- 你需要明白为什么要开启fetch?
- fetch的原理是啥?
2. 本地模式 mapreduce (小文件10倍性能的提升)
是否有其他的方案处理小文件问题?(肯定有嘛)
Join查询优化(重点记住)
其实这块不管是spark还是presto优化的原理本质都是一样
都会经过语法词法分析解析为AST语法树,然后进行相应的逻辑优化与物理优化
4. group by 优化: map端聚合 (预聚合+负载均衡)(重点记住)
同上
5. MapReduce引擎并行度调整
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(几百万记录)的数据,效率肯定会好很多。
6. 执行计划
语法树生成的过程重点
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映射成了作业任务。重点是 逻辑执行计划优化和物理执行计划优化
7. 并行执行
8. 严格模式_ 推测执行
总结
- 可以从设计上减少Join 降低shuffle过程 – 设计上的优化
- 提前聚合:join提前到map端处理 – 计算上的优化
- 小文件合并或者本地直接执行 – 计算上的优化
- 并行度的优化 – 配置/并发上的优化
- 重用JVM
- Hive只是一个数据仓库的工具,其核心其实还是SQL解析引擎(以及计算引擎这块),这一块无论是何种大数据计算引擎(Spark;Flink;Presto)这一块的优化本质都一样,都是提前预聚合;谓词下推;大小文件优化;计算粒度优化;资源分配优化等等;自己总结的时候可以将Hive;Spark;Flink这几个热门的分布式计算框架的计算调优部分横向对比总结下。