HQL如何转换到MR

发布时间 2023-04-21 00:46:13作者: 不要给我歪!

HQL编译成MapReduce任务是由Hive中Compiler组件完成的,主要分成了六个阶段:
1. Antrl词法分析、语法分析:Antrl中定义了SQL的语法规则,完成SQL的词法、语法分析,将SQL语言转换为AST。
2. 语义分析:获得抽象语法树(即AST)之后,遍历AST,抽象出查询的基本组成单元QueryBlock
3. 生成逻辑执行计划:遍历QueryBlock,翻译为Operator Tree
4. 优化逻辑执行计划: 逻辑层优化器进行 OperatorTree 变换,合并 Operator,达到减少 MapReduce Job,减少数据传输及 shuffle 数据量;
5. 生成物理执行计划:将得到的Operator Tree翻译为MapReduce任务
6. 优化物理执行计划:对得到的MapReduce进行优化

Hive最终生成的MapReduce,无论是Map Task还是Reduce Task都是由Operator Tree组成的,基本的Operator包括

  • TableScanOperator
  • SelectOperator
  • FilterOperator
  • JoinOperator
  • GroupByOperator
  • ReduceSinkOperator

更多具体的可以详见https://tech.meituan.com/2014/02/12/hive-sql-to-mapreduce.html