Presto之Split的调度处理流程

本文详细走读了Presto中SQL执行的内部机制,从Split的调度到Operator的处理流程,深入理解数据如何在Task和Operator之间并行处理,形成最终的查询结果。重点介绍了TaskExecutor中的SplitRunner如何处理split,以及Operator如何通过processInternal方法协调工作,传递Page并完成计算任务。

一. 前言

      在Presto中,一个SQL的数据会切分成n个split,各个split之前并行执行。每个Task处理一个Split。在Task中,每个Split将作用于一个Driver上,一个Driver有许多Operator组成,Split上的所有Page会依次经过各个operator进行转换和计算,最终完成SQL所需要的结果输出。本文主要走读Presto中Split的代码处理流程。

二.  Split的调度代码走读

     入口处在TaskExecutor中:

public void run()
{
   try (SetThreadName runnerName = new SetThreadName("SplitRunner-%s", runnerId)) {
      split = waitingSplits.take(); 
          blocked = split.process();
               split.processFor
                   driverSplitRunnerFactory.createDriver
                      Driver.createDriver(driverContext, operators.build());  //driver中封装split
                         driver.processFor
                            processInternal(operationTimer)
                     
   }
 
}

三.  Operator的调度代码走读

     上述最后processInternal中是对Operator进行调度处理的,其执行流程如下所示:

private ListenableFuture&l
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值