未记录事实核验 · 状态:维护中

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

warning 适用边界与维护说明

本文适合用于学习Coordinator与Worker分工、Page批处理、连接器职责以及Stage、Task、Split等架构概念;架构图和代码应作为概念与职责示意,不是可直接使用的连接器实现或生产配置规范,配置数值也不构成通用推荐。正文仍将批次通常为1000-8000行、使用CPU向量化或SIMD指令、动态压缩中间结果表述为实现机制,但未提供对应的版本、实现范围或支持材料,不能仅凭Page批处理推断实际部署具备这些底层行为或性能。溢写已明确限定为启用且相关算子支持时的行为,不应理解为所有大查询都会自动溢写。

Presto架构原理 - 深入理解分布式查询引擎设计

abstract 📋 本节概览

  • 🎯 学习目标:深入理解Presto的架构设计原理和核心机制
  • 📚 前置知识:01-Presto概述与特性|Presto概述与特性 和 分布式系统基础概念
  • ⏱️ 预计用时:60分钟

🏗️ 整体架构设计

📊 Presto分布式架构全景

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TB
    subgraph "客户端层 Client Layer"
        A[CLI客户端<br/>🖥️ Presto CLI]
        B[JDBC驱动<br/>📡 Java应用]
        C[Web UI<br/>🌐 管理界面]
    end
    subgraph "协调器 Coordinator"
        D[查询管理器<br/>📋 Query Manager]
        E[执行计划器<br/>🎯 Execution Planner]
        F[任务调度器<br/>⚖️ Task Scheduler]
        G[元数据管理<br/>📊 Metadata Manager]
    end
    subgraph "工作节点集群 Worker Cluster"
        H[Worker Node 1<br/>⚙️ Task Executor]
        I[Worker Node 2<br/>⚙️ Task Executor]
        J[Worker Node N<br/>⚙️ Task Executor]
    end
    subgraph "连接器层 Connector Layer"
        K[Hive Connector<br/>🗄️ 数据仓库]
        L[MySQL Connector<br/>💾 关系数据库]
        M[Kafka Connector<br/>🚰 流数据]
        N[Custom Connector<br/>🔧 自定义数据源]
    end
    subgraph "数据存储层 Storage Layer"
        O[HDFS/S3<br/>☁️ 分布式存储]
        P[关系数据库<br/>💿 RDBMS]
        Q[Kafka<br/>🚰 消息主题]
    end
    A --> D
    B --> D
    C --> D --> E --> F --> G
    F --> H
    F --> I
    F --> J
    H --> K
    I --> L
    J --> M
    H --> N
    K --> O
    L --> P
    M --> Q
    N --> O
    style D fill:#ff6b6b,color:#fff
    style E fill:#4ecdc4,color:#fff
    style F fill:#45b7d1,color:#fff
    style H fill:#96ceb4,color:#fff
    style I fill:#96ceb4,color:#fff
    style J fill:#96ceb4,color:#fff

🎯 架构设计原则

1. 主从架构(Master-Slave)

  • Coordinator:单点协调,负责查询解析、计划生成、任务调度
  • Worker:多节点并行,负责具体的数据处理和计算任务

2. 无共享架构(Shared-Nothing)

  • 每个Worker节点独立处理数据,无需共享状态
  • 通过网络进行数据交换,避免资源竞争

3. 流水线处理(Pipeline Processing)

  • 查询阶段并行执行,数据流式传输
  • 避免中间结果落盘,提高处理效率

🎯 Coordinator详解

📋 核心组件架构

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TB
    subgraph "Coordinator内部架构"
        A[HTTP Server<br/>🌐 接收客户端请求]
        subgraph "查询处理引擎"
            B[SQL Parser<br/>📝 语法解析器]
            C[Analyzer<br/>🧠 语义分析器]
            D[Planner<br/>🎯 执行计划器]
            E[Optimizer<br/>⚡ 查询优化器]
        end
        subgraph "执行管理"
            F[Query Manager<br/>📊 查询管理器]
            G[Task Manager<br/>⚙️ 任务管理器]
            H[Node Manager<br/>🖥️ 节点管理器]
        end
        subgraph "元数据服务"
            I[Metadata Manager<br/>📋 元数据管理]
            J[Security Manager<br/>🔐 安全管理]
            K[Resource Manager<br/>💾 资源管理]
        end
    A --> B --> C --> D --> E --> F --> G --> H
    F --> I --> J --> K
    style A fill:#e3f2fd
    style F fill:#ff6b6b,color:#fff
    style G fill:#4ecdc4,color:#fff
    style I fill:#45b7d1,color:#fff

    end

🔄 查询处理流程

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TD
    A[SQL查询<br/>📝 客户端请求]
    B[语法解析<br/>🔍 Parse Tree]
    C[语义分析<br/>🧠 AST + Metadata]
    D[逻辑计划<br/>📋 Logical Plan]
    E[物理计划<br/>⚙️ Physical Plan]
    F[优化计划<br/>⚡ Optimized Plan]
    G[分布式计划<br/>🌐 Distributed Plan]
    H[任务调度<br/>📤 Task Scheduling]
    
    A --> B
    B --> C
    C --> D
    D --> E
    E --> F
    F --> G
    G --> H
    
    style A fill:#e3f2fd
    style C fill:#f3e5f5
    style E fill:#e8f5e8
    style G fill:#fff3e0
    style H fill:#fce4ec

🎛️ 关键功能详解

1. 查询解析与分析

// SQL解析示例流程
SQL: "SELECT customer_id, SUM(amount) FROM orders GROUP BY customer_id"

1. 语法解析 → Parse Tree
2. 语义分析 → 验证表/列存在性,类型检查
3. 生成AST → 抽象语法树
4. 元数据绑定 → 绑定表结构信息

2. 执行计划生成

  • 逻辑计划:描述查询的逻辑操作(scan, filter, join, aggregate)
  • 物理计划:选择具体的算法实现(hash join vs merge join)
  • 分布式计划:将计划分解为可并行执行的任务

3. 任务调度策略

  • 数据本地性:优先调度到数据所在节点
  • 负载均衡:考虑节点CPU、内存使用情况
  • 资源限制:遵守查询级别的资源约束

⚙️ Worker节点详解

🏗️ Worker内部架构

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TB
    subgraph "Worker Node架构"
        A[Task Executor<br/>⚙️ 任务执行器]
        subgraph "执行引擎"
            B[Operator Pipeline<br/>🔄 算子流水线]
            C[Memory Manager<br/>💾 内存管理器]
            D[Buffer Manager<br/>📦 缓冲区管理]
        end
        subgraph "数据访问层"
            E[Connector Interface<br/>🔗 连接器接口]
            F[Page Source<br/>📄 数据源]
            G[Page Sink<br/>📤 数据输出]
        end
        subgraph "通信模块"
            H[HTTP Client<br/>🌐 HTTP客户端]
            I[Exchange Client<br/>↔️ 数据交换]
            J[Discovery Client<br/>🔍 服务发现]
        end
    A --> B --> C --> D
    B --> E --> F
    E --> G
    A --> H --> I --> J
    style A fill:#96ceb4,color:#fff
    style B fill:#4ecdc4,color:#fff
    style C fill:#45b7d1,color:#fff
    style E fill:#feca57,color:#000

    end

📊 数据处理模型

1. Page-Based处理模型

// Presto的Page数据结构
class Page {
    Block[] blocks;        // 列数据块
    int positionCount;     // 行数
    long sizeInBytes;      // 内存大小
}

// 典型处理流程
InputPage → Operator.process() → OutputPage

2. 向量化执行

  • 一次处理一批数据(通常1000-8000行)
  • 利用CPU向量化指令集提高性能
  • 减少函数调用开销

3. 流水线执行

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TD
    A[Scan Operator<br/>📖 数据扫描]
    B[Filter Operator<br/>🔍 条件过滤]
    C[Project Operator<br/>📊 列投影]
    D[Exchange Operator<br/>↔️ 数据交换]
    A --> B --> C --> D
    style A fill:#e3f2fd
    style B fill:#f3e5f5
    style C fill:#e8f5e8
    style D fill:#fff3e0

🔗 连接器架构

📊 连接器设计模式

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TB
    subgraph "连接器抽象层"
        A[ConnectorFactory<br/>🏭 连接器工厂]
        B[Connector Interface<br/>🔌 连接器接口]
        C[ConnectorMetadata<br/>📋 元数据接口]
    end
    subgraph "数据访问接口"
        D[ConnectorSplitManager<br/>✂️ 数据分片管理]
        E[ConnectorPageSourceProvider<br/>📄 数据源提供者]
        F[ConnectorPageSinkProvider<br/>📤 数据输出提供者]
    end
    subgraph "具体连接器实现"
        G[HiveConnector<br/>🗄️ Hive连接器]
        H[MySQLConnector<br/>💾 MySQL连接器]
        I[KafkaConnector<br/>🚰 Kafka连接器]
    end
    A --> B --> C
    B --> D --> E --> F
    C --> G
    D --> H
    E --> I
    style B fill:#ff6b6b,color:#fff
    style D fill:#4ecdc4,color:#fff
    style G fill:#45b7d1,color:#fff
    style H fill:#96ceb4,color:#fff
    style I fill:#feca57,color:#000

🔧 连接器核心接口

1. 元数据接口

public interface ConnectorMetadata {
    // 列举schema和table
    List<String> listSchemaNames();
    List<SchemaTableName> listTables(String schemaName);
    
    // 获取表元数据
    ConnectorTableMetadata getTableMetadata(ConnectorTableHandle table);
    
    // 获取列信息
    Map<String, ColumnHandle> getColumnHandles(ConnectorTableHandle table);
}

2. 数据分片接口

public interface ConnectorSplitManager {
    // 生成数据分片
    ConnectorSplitSource getSplits(
        ConnectorTransactionHandle transaction,
        ConnectorSession session,
        ConnectorTableHandle table,
        SplitSchedulingStrategy splitSchedulingStrategy
    );
}

💾 内存管理机制

📊 内存架构设计

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TB
    subgraph "Presto内存管理"
        A[Total Memory Pool<br/>💾 总内存池]
        subgraph "内存分类"
            B[User Memory<br/>👤 用户内存<br/>查询数据处理]
            C[System Memory<br/>⚙️ 系统内存<br/>元数据、网络缓冲]
        end
        subgraph "内存控制"
            D[Query Memory<br/>🔍 查询级内存限制]
            E[Node Memory<br/>🖥️ 节点级内存限制]
            F[Global Memory<br/>🌐 全局内存限制]
        end
        subgraph "内存回收"
            G[Spill to Disk<br/>💿 溢写到磁盘]
            H[Query Killing<br/>❌ 查询终止]
            I[Memory Compaction<br/>🗜️ 内存压缩]
        end
    A --> B
    A --> C
    B --> D
    C --> E
    D --> F
    E --> G
    F --> H
    G --> I
    style A fill:#e3f2fd
    style B fill:#f3e5f5
    style D fill:#e8f5e8
    style G fill:#fff3e0

    end

⚖️ 内存控制策略

1. 分层内存限制

# 节点级内存配置
query.max-memory-per-node=8GB
query.max-total-memory-per-node=10GB

# 查询级内存配置  
query.max-memory=50GB
query.max-total-memory=100GB

# 每节点堆内存预留配置(示例值)
memory.heap-headroom-per-node=2GB

2. 内存回收机制

  • 条件性溢写:在启用溢写且相关算子支持时,可将部分中间数据溢写到磁盘;并非所有大查询都会自动溢写
  • 查询终止:超过限制的查询被强制终止
  • 内存压缩:动态压缩中间结果数据

🔄 查询执行模型

📊 Stage和Task层次结构

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TB
    subgraph "查询执行层次"
        A[Query<br/>🔍 完整查询]
        subgraph "Stage层"
            B[Source Stage<br/>📖 数据扫描阶段]
            C[Intermediate Stage<br/>🔄 中间处理阶段]
            D[Final Stage<br/>🎯 最终聚合阶段]
        end
        subgraph "Task层"
            E[Task 1<br/>⚙️ 并行任务1]
            F[Task 2<br/>⚙️ 并行任务2]
            G[Task N<br/>⚙️ 并行任务N]
        end
        subgraph "Split层"
            H[Split 1<br/>📄 数据分片1]
            I[Split 2<br/>📄 数据分片2]
            J[Split M<br/>📄 数据分片M]
        end
    A --> B
    A --> C
    A --> D
    B --> E
    C --> F
    D --> G
    E --> H
    F --> I
    G --> J
    style A fill:#ff6b6b,color:#fff
    style B fill:#4ecdc4,color:#fff
    style C fill:#45b7d1,color:#fff
    style D fill:#96ceb4,color:#fff

    end

⚡ 并行执行策略

1. 数据并行

  • 按数据分片并行:不同Worker处理不同的数据分片
  • 算子并行:同一算子的多个实例并行执行

2. 流水线并行

  • 上游算子产生数据,下游算子立即消费
  • 避免等待整个阶段完成,提高执行效率

3. 动态调度

// 动态Split调度示例
if (worker.isIdle() && splits.hasMore()) {
    Split split = splits.getNext();
    scheduleTaskToWorker(worker, split);
}

🚀 性能优化机制

📊 查询优化器架构

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TD
    subgraph "Presto查询优化器"
        A[Rule-Based Optimizer<br/>📏 规则优化器]
        B[Cost-Based Optimizer<br/>💰 成本优化器]
        A --> B --> C[Statistics<br/>📊 统计信息]
        subgraph "优化规则"
            D[Predicate Pushdown<br/>🔽 谓词下推]
            E[Projection Pushdown<br/>📊 投影下推]
            F[Join Reordering<br/>🔄 连接重排序]
            G[Limit Pushdown<br/>⬇️ 限制下推]
        end
        A --> D
        A --> E
        B --> F
        C --> G
    end
    style B fill:#ff6b6b,color:#fff
    style C fill:#4ecdc4,color:#fff
    style D fill:#45b7d1,color:#fff
    style F fill:#96ceb4,color:#fff

🎯 关键优化技术

1. 谓词下推(Predicate Pushdown)

-- 原始查询
SELECT * FROM (
    SELECT customer_id, order_amount 
    FROM orders
) t 
WHERE customer_id = 12345;

-- 优化后:将WHERE条件下推到子查询
SELECT customer_id, order_amount 
FROM orders 
WHERE customer_id = 12345;

2. 动态过滤(Dynamic Filtering)

  • 运行时生成过滤条件,减少数据扫描量
  • 特别适用于星型模式的JOIN查询

3. 向量化执行

  • 批量处理数据,提高CPU缓存利用率
  • 利用SIMD指令集进行并行计算

🔗 学习检验与实践

✅ 架构理解检查

  • [ ] 能够画出Presto的整体架构图
  • [ ] 理解Coordinator和Worker的职责分工
  • [ ] 掌握查询执行的完整流程
  • [ ] 了解连接器的设计模式

🚀 深度理解验证

  • [ ] 能够解释Stage、Task、Split的关系
  • [ ] 理解内存管理的分层机制
  • [ ] 掌握查询优化的核心技术
  • [ ] 了解并行执行的策略

💡 实践应用思考

  • [ ] 如何根据查询特点选择合适的内存配置?
  • [ ] 如何设计自定义连接器?
  • [ ] 如何诊断和优化慢查询?
  • [ ] 如何规划Presto集群的资源配置?

🔗 学习连接

📚 本节核心概念

  • 架构模式:主从架构、无共享架构、流水线处理
  • 执行模型:Page-based处理、向量化执行、并行调度
  • 内存管理:分层限制、动态回收、溢写机制
  • 查询优化:规则优化、成本优化、动态过滤

🎯 后续学习路径

理论基础巩固:

  • ✅ 是否理解了分布式查询的核心挑战?
  • ✅ 是否掌握了Presto的设计思想?

实践环节准备:


tip 💡 架构设计精髓

🏗️ Presto架构核心价值:

  • 🎯 协调与执行分离 - Coordinator专注调度,Worker专注计算
  • 💾 内存优先策略 - 流水线处理,避免磁盘I/O
  • 🔗 插件化连接器 - 统一接口,灵活扩展数据源
  • ⚡ 向量化执行 - 批量处理,充分利用现代CPU特性

🚀 深入实践:架构理解为实践奠定基础,接下来通过 03-Presto环境搭建|Presto环境搭建 动手验证理论知识!