核心思想:是将hive程序当做mapreduce程序进行优化;
hive中sql语句转化为MapReduce的过程,整个编译过程分为6个阶段:
1).Antlr定义Sql的语法规则,完成SQL词法,语法解析,将SQL转化为 抽象语法树AST Tree。
2).遍历抽象语法树AST Tree,抽象出查询的基本组成单元 QueryBlock查询块。
3).遍历QueryBlock,翻译为执行操作树OperatorTree。
4).逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量。
5).遍历OperatorTree,翻译为MapReduce任务。
6).物理层优化器进行MapReduce任务的变换,生成最终的执行计划。
1、 显示查询计划:
在hive命令行输入:explain extended select count(*) from bigdata_user;
可以查看该sql执行的整个过程。
2、hive的运行方式:
1).集群模式:需要先将本地程序打成Jar包,上传集群,如果执行出错,需要继续修改上传,在执行jar包,循环往复,影响开发效率。
2).本地模式:在hive中执行 set hive.exec.mode.local.auto=true;
只能在测试和开发环境进行,并且限制输入文件的大小不能超过128M,如果大于该配置,仍会以集群方式运行。对于小数据执行时间可以明显被缩短。
3、并行执行:
一次SQL计算中允许并行执行的job个数的最大值,Hive会将一个查询转化成一个或者多个阶段。这样的阶段可以是MapReduce阶段、抽样阶段、合并阶段、limit阶段。由于job包含多个阶段,而这些阶段并非完全互相依赖,所以可以启用并