一. 前言
在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

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

被折叠的 条评论
为什么被折叠?



