由客户端提交的HiveQL语句将最终被转换为一个或多个MapReduce任务并提交由Hadoop执行。不包含聚合和连接的简单SELECT语句可以使用一个单独的只包含Map阶段的任务实现。使用GROUP BY子句的聚合可以使用一个独立的MapReduce任务实现。包含大量多表连接的复杂查询需要依靠多个MapReduce任务的顺序执行来实现。
HiveQL编译器的操作分为好几个阶段。
在第一个阶段中,查询语句被解析并转化成抽象的语法树。随后语法树将被传给语义分析器,在这一过程中,通过使用元数据存储中的信息来判别列名和数据类型。
语义分析器将它们转化并生成一种内部的表达方式,然后传递给逻辑计划生成器,在这里将生成一颗逻辑操作树。在逻辑计划经过数次的传递和优化之后,它将被送往物理计划生成器。经过物理计划生成器和处理之后,将产生一张DAG(有向无环图)用以生成最终的MapReduce任务。
本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6105080.html,如需转载请自行联系原作者