1 具体核心流程图介绍
?2 详情分析
(1)HQL的执行形式
- 1)$HIVE_HOME/bin/hive 进入客户端,然后执行 HQL;
- 2)$HIVE_HOME/bin/hive -e “hql”;
- 3)$HIVE_HOME/bin/hive -f hive.sql;
- 4)先开启 hivesever2 服务端,然后通过 JDBC 方式连接远程提交 HQL。
?可 以 知 道 我 们 执 行 HQL 主 要 依 赖 于 $HIVE_HOME/bin/hive 和 $HIVE_HOME/bin/ hivesever2 两种脚本来实现提交 HQL,而在这两个脚本中,最终启动的 JAVA 程序的主类为 “org.apache.hadoop.hive.cli.CliDriver”,所以其实 Hive 程序的入口就是“CliDriver”这个类。
(2)服务端接收到客户端的服务请求会启动一个CliDriver类。该类主要完成以下功能
1)解析客户端的-e,-f等参数
2)定义标准的输入输出流
3)按照;切分HQL语句。可以执行以分号隔开的多个SQL语句,按顺序执行
(3)创建Driver类
1)Hive语法解析器会将HQL语句按照词法、语法解析,翻译成抽象的语法树【AST】
2)将抽象的语法树转换成任务树【TaskTree】,调用分析器的方法
- ??? 将抽象语法树转换为查询块【 QueryBlock】,可以理解为最小的查询单元
- ??? 遍历查询块,将其转换为操作树【OperatorTree,逻辑执行单元】,可以理解为不可拆分的逻辑执行单元
- ?? 使用逻辑优化器对操作树进行逻辑优化
- ?? 遍历操作树,转换为任务数【TaskTree】。也就是翻译为MR任务流程,将逻辑执行计划转换为物理执行计划
- ? 使用物理执优化器对任务树进行物理优化
3)提交任务执行
?? 生成最终的执行计划提交到Hadoop集群
- 1)获取MR临时工作目录
- 2)定义分区器【Partitioner】
- 3)? 定义Mapper和Reducer
- 4)实例化job
- 5)? 提交job
3 流程图
?
?
|