码迷,mamicode.com
首页 > 其他好文 > 详细

Presto核心

时间:2020-12-22 12:56:53      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:它的   拉取   调用   逻辑   statement   assign   lan   remote   etc   

SqlQueryExecution
① 将Statement树转化为AST树
② 做语法解析(根据元数据)
③ 权限校验
④ 构造逻辑执行计划
LogicalPlanner#planStatementWithoutOutput:将AST树转为逻辑执行计划
⑤ 基于RBO进行优化
⑥ Stage划分
⑦ 进行任务调度
SqlQueryScheduler#schedule:遍历当前Sql所解析的所有Stage
SourcePartitionedScheduler#assignSplits:为split分配Task
SplitPlacementPolicy#computeAssignments:为split分配Node
TaskInfoFetcher:负责从远端拉取数据

任务调度

  1. 遍历当前所有任务的Stage
    SqlQueryScheduler#schedule:遍历当前Sql所解析的所有Stage
    ① 遍历所有Stage挨个进行调度
    ② 对调度结束的Stage,将其信息更新到依赖它的那些任务里,这样那些任务才知道从哪里进行数据的拉取

  2. 分发split给各个Worker节点上的Task
    SourcePartitionedScheduler#assignSplits

  3. 判断Sql所涉及的节点上是否存在Task
    SqlStageExecution#scheduleSplits:如果该Worker节点有Task,更新splits
    ① 获取目标节点上所有的Task
    SqlStageExecution@tasks 存储着每个Worker节点上负责的Task任务
    ② 如果目标节点上不存在Task,则调用 SqlStageExecution#scheduleTask
    如果目标节点存在Task,则往SqlStageExecution@tasks中的目标Task中添加split

    SqlStageExecution#scheduleTask:在Worker节点上新建Task
    HttpRemoteTask#HttpRemoteTask
    ① 遍历所分配到该Task上的所有split
    ② 创建一个ContinuousTaskStatusFetcher对象定期拉取Worker上Task状态
    创建一个TaskInfoFetcher对象定期拉取Worker上Task信息
    ③ 如果ContinuousTaskStatusFetcher是未完成状态,则更新该Task的split列表
    如果状态是已完成,则执行释放资源的操作

Presto核心

标签:它的   拉取   调用   逻辑   statement   assign   lan   remote   etc   

原文地址:https://www.cnblogs.com/lin-/p/14151470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!