Trino Worker端执行task与读ORC文件源码链路流程

下述Worker源码调用链路基于Trino(原PrestoSQL)330版本,在Coordinator端调用SqlStageExecution.scheduleTask()->HttpRemoteTaskFactory.createRemoteTask()和HttpRemoteTask.start()之后,最终会走到HttpRemoteTask.sendUpdate(),将执行task请求封装成JSON格式后,通过Http客户端发送给Worker节点,在Worker端收到Coordinator端发来的HTTP请求后,就会进行如下步骤:

// 生产流程,Worker启动后从这里接收Coordinator的创建task请求,其中包含了splits信息
TaskResource.createOrUpdateTask
  ->SqlTaskManager.updateTask
    ->SqlTask.updateTask
      ->SqlTaskExecution.addSource
        ->updateSources
          ->schedulePartitionedSource
            ->enqueueDriverSplitRunner
              ->TaskExecutor.enqueueSplits
  
// 消费流程,Worker进程从这里开始启动并创建TaskRunner线程池,然后利用上面链路接收Coordinator发来的task请求中的splits信息,在这里拿到split进行处理
TaskExecutor.start
  ->addRunnerThread
    ->new TaskRunner().run
      ->PrioritizedSplitRunner.process
        ->SplitRunner.run
          ->DriverSplitRunner.run
            ->Driver.processFor
              ->Driver.processInternal
                ->Driver.processNewSources
  
// 读取文件
Driver.processInternal
  ->TableScanOperator.getOutput
    ->PageSourceManager.createPageSource
      ->ClassLoaderSafeConnectorPageSourceProvider.createPageSource
        ->HivePageSourceProvider.createPageSource
          ->createPageSourceInternal
            ->createHivePageSource
              ->OrcPageSourceFactory.createPageSource
                ->createOrcPageSource
                  ->new HdfsOrcDataSource
                    ->new OrcReader与OrcReader.createRecordReader
                      ->public OrcRecordReader中new StripeReader和createColumnReaders
  
// 上面各种create reader后回到上述读取文件流程开头的TableScanOperator.getOutput
TableScanOperator.getOutput
  ->OrcPageSource.getNextPage
    ->OrcRecordReader.nextPage
      ->advanceToNextRowGroup
        ->advanceToNextStripe
          ->StripeReader.readStripe,和OrcRecordReader.nextPage中通过ColumnReader.readBlock构建Page

在读取ORC文件方面,由于历史原因Presto社区当时自己实现了一套ORC Reader逻辑,但多年来因修bug、提升读性能等消耗了开源社区不少精力,而且其中有很多还是从ORC社区源码借鉴来的。因此有部分声音认为:现在更应该直接采用ORC社区官方的Reader逻辑,可以让Presto社区花更多精力专注于优化更核心的架构功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值