hive leftjoin优化 hive优化总结_并行度


文章目录

  • 优化点
  • 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. 抓取机制

hive leftjoin优化 hive优化总结_并行度_02

  1. 你需要明白为什么要开启fetch?
  2. fetch的原理是啥?

2. 本地模式 mapreduce (小文件10倍性能的提升)

hive leftjoin优化 hive优化总结_大数据_03


是否有其他的方案处理小文件问题?(肯定有嘛)

Join查询优化(重点记住)

hive leftjoin优化 hive优化总结_执行计划_04


hive leftjoin优化 hive优化总结_执行计划_05

其实这块不管是spark还是presto优化的原理本质都是一样
都会经过语法词法分析解析为AST语法树,然后进行相应的逻辑优化与物理优化

4. group by 优化: map端聚合 (预聚合+负载均衡)(重点记住)

hive leftjoin优化 hive优化总结_执行计划_06


hive leftjoin优化 hive优化总结_hive leftjoin优化_07


同上

5. MapReduce引擎并行度调整

hive leftjoin优化 hive优化总结_大数据_08

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(几百万记录)的数据,效率肯定会好很多。

hive leftjoin优化 hive优化总结_hive leftjoin优化_09

hive leftjoin优化 hive优化总结_执行计划_10

6. 执行计划

hive leftjoin优化 hive优化总结_Hive_11


语法树生成的过程重点

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. 并行执行

hive leftjoin优化 hive优化总结_Hive_12

8. 严格模式_ 推测执行

hive leftjoin优化 hive优化总结_hive leftjoin优化_13


hive leftjoin优化 hive优化总结_大数据_14

总结

  1. 可以从设计上减少Join 降低shuffle过程 – 设计上的优化
  2. 提前聚合:join提前到map端处理 – 计算上的优化
  3. 小文件合并或者本地直接执行 – 计算上的优化
  4. 并行度的优化 – 配置/并发上的优化
  5. 重用JVM
  6. Hive只是一个数据仓库的工具,其核心其实还是SQL解析引擎(以及计算引擎这块),这一块无论是何种大数据计算引擎(Spark;Flink;Presto)这一块的优化本质都一样,都是提前预聚合;谓词下推;大小文件优化;计算粒度优化;资源分配优化等等;自己总结的时候可以将Hive;Spark;Flink这几个热门的分布式计算框架的计算调优部分横向对比总结下。