当前位置: 首页 > news >正文

【Doris基础】Apache Doris中的Fragment概念详解

目录

1.1 什么是Fragment

1.2 Fragment与MPP架构

2 Fragment的执行模型

2.1 Fragment的组成结构

2.2 Fragment的执行流程

3 Fragment的类型与拓扑结构

3.1 Fragment的三种基本类型

3.2 Fragment间的数据交换方式

4 Fragment的并行执行机制

4.1 实例化模型

4.2 数据本地化执行

4.3 流水线执行

5 Fragment的优化策略

5.1 分区裁剪(Partition Pruning)

5.2 列裁剪(Column Pruning)

5.3 谓词下推(Predicate Pushdown)

6 Fragment的调度过程

6.1 调度流程

6.2 调度策略

7 Fragment的监控与调优

7.1 关键监控指标

7.2 性能调优方法

8 总结


1.1 什么是Fragment

在Apache Doris的分布式查询执行模型中, Fragment(片段)是查询执行计划的基本调度单位。一个完整的查询执行计划会被拆分为多个Fragment,这些Fragment按照特定的拓扑结构组织起来,共同完成查询的执行。
核心特性
  • 并行执行单元:每个Fragment可以包含多个并行的执行实例
  • 数据流边界:Fragment之间通过数据流进行通信
  • 调度粒度:Doris调度器以Fragment为单位进行任务调度

1.2 Fragment与MPP架构

Doris采用MPP(Massively Parallel Processing)架构,Fragment正是实现并行计算的关键抽象:

2 Fragment的执行模型

2.1 Fragment的组成结构

一个典型的Fragment包含以下组件:
  • PlanNode树:由多个算子组成的执行逻辑
  • 数据源:扫描节点或接收节点
  • 数据汇:发送节点或输出节点
  • 执行参数:并行度、内存限制等

2.2 Fragment的执行流程

  • Doris中Fragment的执行遵循以下生命周期:
阶段说明
  • 初始化:Coordinator创建Fragment并设置执行参数
  • 实例分发:将Fragment实例分配到多个BE节点
  • 执行准备:BE节点准备执行所需的资源
  • 开始执行:并行执行Fragment实例
  • 数据交换:Fragment间通过Exchange节点传输数据
  • 状态汇报:BE节点向Coordinator汇报执行状态
  • 结束清理:释放Fragment占用的资源

3 Fragment的类型与拓扑结构

3.1 Fragment的三种基本类型

  • 扫描Fragment(Scan Fragment)
特点
  • 包含表的扫描操作
  • 通常位于执行计划的最底层
  • 每个分片对应一个实例
  • 计算Fragment(Compute Fragment)
特点
  • 不直接访问存储
  • 接收上游数据并进行计算
  • 可能包含复杂的计算逻辑
  • 汇聚Fragment(Sink Fragment)
特点
  • 通常位于执行计划最顶层
  • 负责最终结果的汇聚和输出
  • 只有一个执行实例

3.2 Fragment间的数据交换方式

  • 广播(Broadcast)
  • 分区(Partition)
  • 单播(Singleton)

4 Fragment的并行执行机制

4.1 实例化模型

  • 每个Fragment会在多个BE节点上实例化为多个执行实例:
关键参数
  • parallel_fragment_exec_instance_num:控制每个BE上的实例数
  • dop:Degree of Parallelism,并行度

4.2 数据本地化执行

  • Doris会尽量将Fragment实例调度到数据所在的BE节点:

4.3 流水线执行

  • Fragment实例内部采用流水线执行模型:

5 Fragment的优化策略

5.1 分区裁剪(Partition Pruning)

效果:只扫描相关的分区Fragment

5.2 列裁剪(Column Pruning)

效果:减少Fragment间传输的数据量

5.3 谓词下推(Predicate Pushdown)

效果:尽早过滤数据,减少计算量

6 Fragment的调度过程

6.1 调度流程

6.2 调度策略

  • 数据本地化优先:优先选择数据所在的BE节点
  • 负载均衡:考虑各BE的当前负载
  • 资源限制:检查内存、CPU等资源限制

7 Fragment的监控与调优

7.1 关键监控指标

指标名称

说明

fragment_count

Fragment数量

instance_count

实例总数

fragment_duration

Fragment执行耗时

exchange_data_size

数据交换量

7.2 性能调优方法

  • 调整并行度
SET parallel_fragment_exec_instance_num = 4;
  • 优化内存限制
SET exec_mem_limit = 8589934592; -- 8GB
  • 控制实例数
SET parallel_pipeline_task_num = 16;

8 总结

Fragment设计总结
  • 分布式执行的基础单元:实现了查询的分布式并行执行
  • 灵活的拓扑结构:支持复杂查询的高效执行
  • 资源隔离的边界:便于资源控制和调度
通过深入理解Fragment的概念和执行机制,可以更好地优化Doris查询性能,构建高效的实时数据分析系统。
http://www.lqws.cn/news/90721.html

相关文章:

  • Vue3中使用Echarts图表步骤-demo
  • 通信算法之281:大疆DJI无人机ID-DJI DroneID开源工程-相关问题-协议信息问题
  • 20250603在荣品的PRO-RK3566开发板的Android13下的命令行查看RK3566的温度
  • 学习路之PHP--easyswoole使用视图和模板
  • 大语言模型评测体系全解析(上篇):基础框架与综合评测平台
  • 用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)
  • 剑指offer15_数值的整数次方
  • Elasticsearch | 如何将修改已有的索引字段类型并迁移数据
  • 云原生周刊:探索 Gateway API v1.3.0
  • 点击启动「高效模式」:大腾智能 CAD 重构研发设计生产力
  • Go 为何天生适合云原生?
  • 项目前置知识——不定参以及设计模式
  • MYSQL索引详解
  • 平台化 LIMS 系统架构 跨行业协同与资源共享的实现路径
  • Ubuntu 22.04 安装 Nacos 记录
  • ubuntu 20.04挂载固态硬盘
  • Ubuntu22.04安装MinkowskiEngine
  • 安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6
  • 解决 Ubuntu 20.04 虚拟机中 catkin_make 编译卡死问题
  • seafile:ubuntu搭建社区版seafile12.0
  • Starrocks Full GC日志分析
  • Stone 3D新版本发布,添加玩家控制和生物模拟等组件,增强路径编辑功能,优化材质编辑
  • 无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程
  • 网络安全厂商F5推出AI Gateway,化解大模型应用风险
  • RequestRateLimiterGatewayFilterFactory
  • 大数据 ETL 工具 Sqoop 深度解析与实战指南
  • 深入解析 Flask 命令行工具与 flask run命令的使用
  • 生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
  • LeetCode - 144. 二叉树的前序遍历
  • 电工基础【5】简单的电路设计接线实操