大数据框架Doris全面解析

Apache Doris 简介 - Apache Doris

好的,我们来全面、系统地了解一下大数据框架 Apache Doris

Apache Doris(之前也叫百度 Palo)是一个基于 MPP(大规模并行处理)架构的高性能、实时的分析型数据库。它主要面向在线分析处理(OLAP)场景,能够以亚秒级的响应时间对海量数据进行多维分析和即席查询。


一、Doris 的核心定位与特点

Doris 的设计目标是为用户提供一个单一、统一的分析数据库,以替代传统复杂的"Hadoop + 多个组件(如 Hive, HBase, Presto/Trino, Kylin)"的大数据技术栈。其核心特点包括:

  1. 极致的性能

    • 基于 MPP 架构,并行计算,充分利用集群资源。

    • 列式存储,高效压缩,减少 I/O 开销。

    • 预聚合(物化视图),对于常用聚合查询,速度极快。

    • 向量化执行引擎,充分利用 CPU 缓存和指令集。

  2. 易用性与便利性

    • 兼容 MySQL 协议:用户可以使用标准的 SQL 和常见的 MySQL 客户端(如 mysql cli, JDBC, ODBC)直接连接 Doris,学习成本极低。

    • 简化架构 :系统只有两个核心组件:Frontend (FE)Backend (BE),部署和运维非常简单。

    • 支持标准 SQL:支持 ANSI SQL 2003 标准,包括丰富的函数、窗口函数、CTE(公共表表达式)等。

  3. 实时分析

    • 支持实时数据导入,可以通过多种方式(如 Stream Load, Routine Load, Insert)将数据毫秒级到分钟级地导入 Doris,并立即用于分析。

    • 支持更新 (Unique 模型)和删除操作,可实现"读时更新"或"写时更新",满足实时数仓中对数据更新的需求。

  4. 高可用性与可扩展性

    • 采用分布式架构,FE 和 BE 都可以水平扩展。

    • 多 FE 副本通过类 Raft 协议实现元数据的高可用和一致性。

    • 数据多副本存储,自动恢复,保证数据可靠性。


二、核心架构:FE 与 BE

Doris 的架构非常简洁,主要由两类进程组成:

组件 角色 功能
Frontend (FE) 管理节点 1. 元数据管理 :存储和维护表结构、分区、副本等信息。 2. 查询协调 :接收客户端请求,解析 SQL,生成查询计划,并将计划分发到 BE 执行,然后聚合结果。 3. 集群管理:管理 BE 节点的上下线。
Backend (BE) 计算与存储节点 1. 数据存储 :负责存储表中的数据(按列存储)。 2. 查询执行 :执行 FE 下发的查询计划片段,进行本地计算。 3. 数据复制:保证数据的多副本一致性。

工作流程

  1. 用户通过 MySQL 客户端向 FE 发送 SQL 请求。

  2. FE 解析 SQL,进行元数据校验、权限验证、查询优化,生成分布式执行计划。

  3. FE 将执行计划分发给相关的多个 BE 节点。

  4. 每个 BE 节点并行执行本地计算(扫描数据、过滤、聚合等)。

  5. BE 将中间结果返回给 FE(或直接由某个 BE 进行结果汇聚)。

  6. FE 将最终结果返回给客户端。

这种架构分离了管理职责和计算存储职责,清晰且易于扩展。


三、数据模型与表设计

Doris 提供了灵活的数据模型,在表创建时通过 DUPLICATE KEYUNIQUE KEYAGGREGATE KEY 来定义,以适应不同场景。

模型 关键字 适用场景 说明
明细模型 DUPLICATE KEY(...) 日志分析、用户行为分析 存储最原始的明细数据,即使完全重复的两行数据也会保留。适合 Ad-hoc 查询,任意维度的筛选。
聚合模型 AGGREGATE KEY(...) 报表、可视化 导入阶段就进行预聚合。例如,定义 SUM(v1), COUNT(v2),后续查询时直接取结果,极大提升查询性能。
更新模型 UNIQUE KEY(...) 订单状态变更、用户资料更新 针对需要更新的场景。相同 Key 的数据只会保留最新版本,实现了"读时更新"。
主键模型 PRIMARY KEY(...) 实时更新频繁的场景 2.0版本引入,支持高效的 UPSERTDELETE 操作,提供了更极致的实时更新性能。

分区与分桶

  • 分区(Partitioning):通常按日期分区(如按天),便于数据管理(删除旧数据)、查询时剪枝。

  • 分桶(Bucketing) :在一个分区内,数据被哈希分布到多个 Tablet(数据分片)中。Tablet 是数据移动、复制和计算的最小单元。合理的分桶能保证数据均匀分布,充分利用并行计算。


四、与其他OLAP引擎的对比

特性 Apache Doris ClickHouse Apache StarRocks Presto/Trino
架构复杂度 极简 (FE/BE) 简单 极简 (FE/BE,由Doris分支而来) 中等 (Coordinator/Worker)
易用性 极高 (MySQL协议,标准SQL) 中等(自定义SQL方言,配置复杂) 极高(同Doris) 高(标准SQL)
实时能力 (支持更新,多种导入方式) 强(但更新能力较弱) 极强(优化了Doris的更新模型) 弱(依赖外部存储,如Hive, Kafka)
查询性能 非常快(尤其多表关联) 极快(单表查询世界领先) 极快(在Doris基础上进一步优化) 快(但受连接器性能影响)
生态集成 良好(支持HDFS/S3, Hive, Iceberg等) 一般 良好(同Doris,并更积极) 极好(连接器生态丰富)
适用场景 实时数仓、报表、Ad-hoc查询 单表极速分析、用户行为日志 对性能和实时性要求更高的场景 联邦查询、跨数据源分析

:Apache Doris 和 StarRocks 同源,后者是前者的一个分支,并进行了大量深度优化,两者在很多方面非常相似。目前 StarRocks 在社区活跃度和性能优化上更为激进。


五、典型应用场景

  1. 实时数据仓库:替代传统的 T+1 数仓,实现分钟级甚至秒级的数据分析和报表呈现。

  2. 用户行为分析:支持对海量用户点击流、浏览记录等进行快速的多维度、即席查询。

  3. 日志分析与监控:替代 ELK 中的 Elasticsearch 进行更复杂的聚合查询和分析。

  4. 统一查询层:通过对 Hive、Iceberg、Hudi 等外部表的支持,作为统一的查询入口,简化数据架构。

总结

Apache Doris 的核心优势在于其"全能"和"易用"。它不像 ClickHouse 在单表查询上做到极致但牺牲了易用性和关联查询,也不像 Presto 只做计算引擎而需要依赖外部存储。

它提供了一个 开箱即用、性能卓越、支持实时更新、兼容MySQL协议 的一站式解决方案,特别适合希望构建实时数仓、但又希望技术栈尽可能简单、运维成本低的团队。对于从 MySQL 等传统数据库转型过来的团队来说,Doris 的学习和迁移成本非常低,是其进入大数据分析领域的一个绝佳选择。

相关推荐
wudl55669 分钟前
Flink 1.20 flink-config.yml 配置详解
大数据·flink
华东数交14 分钟前
企业与国有数据资产:入表全流程管理及资产化闭环理论解析
大数据·人工智能
B站_计算机毕业设计之家6 小时前
计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食数据 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅
大数据·爬虫·python·机器学习·信息可视化·课程设计·农业
Apache Flink7 小时前
Flink Agents 0.1.0 发布公告
大数据·flink
潘达斯奈基~9 小时前
在使用spark的applyInPandas方法过程中,遇到类型冲突问题如何解决
大数据·笔记
火星资讯10 小时前
腾多多数字零售模式:从成本转嫁到全生态共赢的破局实践
大数据
望获linux11 小时前
【实时Linux实战系列】实时 Linux 的自动化基准测试框架
java·大数据·linux·运维·网络·elasticsearch·搜索引擎
金宗汉11 小时前
《宇宙递归拓扑学:基于自指性与拓扑流形的无限逼近模型》
大数据·人工智能·笔记·算法·观察者模式
直有两条腿11 小时前
【数据迁移】HBase Bulkload批量加载原理
大数据·数据库·hbase
Joy T12 小时前
海南蓝碳:生态财富与科技驱动的新未来
大数据·人工智能·红树林·海南省·生态区建设