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

【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.xdnf.cn/news/10875.html

相关文章:

  • 探索NautilusTrader:下一代开源算法交易平台的革命性突破
  • 智能光子系统的多任务优化---案例:基于双贝塞尔曲线的紧凑多模光学波导弯曲
  • Dify:启动 Web 服务的详细指南
  • 爱耕云课时管理系统评测
  • SpringBoot项目打包成war包
  • Linux文件系统:从VFS到Ext4的奇幻之旅
  • Linux中断与异常:内核的事件驱动引擎
  • C++初赛的三讲
  • 【MSCKF】UpdaterSLAM::delayed_init 和 FeatureInitializer::single_triangulation
  • 安全编码规范与标准:对比与分析及应用案例
  • Python(十五)
  • 云服务器宕机或重启后数据会丢失吗?
  • 公司存储文件用什么比较好?
  • 笔记:算法题目中需要处理 int 某个位的三种方法:for、while、to_string
  • 免费开源Umi-OCR,离线使用,批量精准!
  • Qt企业级串口通信实战:高效稳定的工业级应用开发指南
  • leetcode hot100(两数之和、字母异位词分组、最长连续序列)
  • PyTorch--池化层(4)
  • Win11系统不推送24H2/西数SSD无法安装24H2 - 解决方案
  • C++:内存管理
  • Baklib内容中台AI重构智能服务
  • STM32与GD32标准外设库深度对比
  • AI 驱动的案例分流:几分钟内构建并部署
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(5)
  • C# Onnx 动漫人物人脸检测
  • 英福康INFICON VGC501, VGC502, VGC503 单通道、双通道和三通道测量装置
  • Linux入门(十四)rpmyum
  • Rust 学习笔记:Cargo 工作区
  • 云台式激光甲烷探测器:守护工业安全的“智慧之眼”
  • 企业为何需要应用可观测性这一战略要务