请阐述 Presto 作为分布式查询引擎的架构设计思路,并解释它是怎样协调多个节点来完成一条跨节点查询的?
考察说明
考查对 Presto 分布式架构核心组件及其协作机制的理解。
回答思路
- 【回答框架 1】Presto 采用典型的 Master-Slave 架构,核心组件包括 Coordinator、Worker 和 Discovery Service。Coordinator 负责接收查询、解析 SQL、生成执行计划并调度任务;Worker 负责执行任务并处理数据;Discovery Service 用于节点注册与发现,实现集群的弹性扩展。
- 【回答框架 2】跨节点查询的处理流程是:用户提交 SQL 给 Coordinator,Coordinator 通过 Antlr 解析生成 AST,再经逻辑计划、物理计划优化成执行计划,并拆分为多个 Stage,每个 Stage 包含若干 Task,Task 根据数据分区分配到不同 Worker 上并行执行。
- 【回答框架 3】数据交换是跨节点查询的关键,Presto 用 Exchange 算子连接不同 Stage,通过 HTTP 协议在 Worker 之间传输数据分页(page),实现 shuffle 操作,类似 MapReduce 的混洗,但基于内存流式处理,减少磁盘开销。
- 【回答框架 4】最终 Coordinator 从各个 Worker 拉取结果,合并后返回给客户端。整个过程中,Coordinator 通过心跳和任务状态机管理 Worker 状态,发现故障则重新调度任务,保证查询的可靠性和完成性。
- 【关键点 1】Presto 是 Coordinator-Worker 架构,Coordinator 负责任务调度与结果汇总。
- 【关键点 2】查询经解析、优化后拆分为多 Stage 多 Task,并行分布在 Worker 上。
- 【关键点 3】数据交换依赖 Exchange 算子与 HTTP 分页传输,实现跨节点 shuffle。
- 【关键点 4】Discovery Service 负责节点发现与集群扩展,保证高可用。
- 【易错点 1】容易忽略 Coordinator 与 Worker 在内存、故障处理方面的不同职责,需明确区分。
- 【易错点 2】虽基于内存,但大结果集或倾斜可能导致 OOM,需要合理配置与优化。
- 【易错点 3】不能把 Presto 与 Hive 的 MapReduce 混淆,Presto 是内存计算引擎,数据流经网络传输,但不落盘。