前言
在presto中有Query,Stage,Task,Pipeline,Driver,Operator等等的概念,他们一生二,二生三,三生万物,构成了presto整个DAG的脉络。这里只对Stage与Task进行展开,大体讲述了以下几个问题:
- Stage的创建
- Task的创建
- Stage与Task的对应关系
- Task的状态感知
Stage的诞生
Stage是逻辑执行计划在分析引擎中的直接体现。如何将Query划分成多个Stage是在生成逻辑执行计划时确定的,这篇文章不做展开。在Stage的诞生中,有一个举足轻重的类叫SqlQueryScheduler,在这个类实例化时调用createStages方法生成了整个查询的Stage,可以看到createStages方法是一个递归调用的方法,这个方法是一个树的先序遍历的实现,也就是这个方法先序遍历了整个逻辑执行计划,根据逻辑执行计划的stage划分生成了一个又一个Stage。