大数据Doris之_13_湖仓一体
前言
Github:https://github.com/HealerJean
一、湖仓一体概念与 Doris 的定位
1、 传统数据架构痛点
-
数据湖: 通常指存储海量原始数据的集中式存储系统(如
AWSS3、MinIO、阿里云OSS等),数据湖中的数据可能结构各异(结构化、半结构化、非结构化)。 - 数据孤岛:数据分散在数据湖(如
S3、HDFS)和数据仓库(如Doris、ClickHouse)中,需重复ETL(全称为Extract(抽取)、Transform(转换)、Load(加载)) - 处理链路复杂:数据湖用于存储,数仓用于分析,需维护两套系统
- 成本高:存储和计算资源无法弹性共享
2、湖仓一体核心理念
- 统一存储:数据只需存储一份,同时支持事务性写入和分析型查询
- 统一元数据:湖和仓使用同一套元数据管理,避免数据冗余和不一致
- 统一计算引擎:提供统一的
SQL接口,屏蔽底层存储差异
3、Doris 湖仓一体的优势
- 高性能:基于向量化执行引擎和
Morsel-Driven并行计算,单表查询性能优于Spark SQL - 低延迟:支持实时数据摄入和亚秒级查询响应
- 易集成:无缝对接
Hive、Iceberg、Hudi等数据湖格式 - 弹性扩展:计算和存储分离架构,支持资源弹性伸缩
4、数据湖联邦查询
数据湖联邦查询:是数据管理与分析领域的重要概念,其核心在于解决数据湖环境下的跨源数据查询难题。以下从定义、核心价值、技术实现及典型场景等方面展开说明:
数据湖联邦查询的本质是 “让数据不动,计算动”,通过统一引擎打破数据孤岛,实现跨源数据的实时分析。在企业数字化转型中,这一能力可大幅提升数据利用率,降低数据整合成本
1)定义:打破数据孤岛的跨源查询能力
数据湖联邦查询指通过一套统一的查询引擎,对分布在不同存储系统(如对象存储、
HDFS、数据库、数据湖等)中的数据进行跨源、无缝的联合查询,而无需将数据进行物理迁移或复制。
联邦:强调 “分布式、多源整合”,类似联邦政府对各州的统一管理,不同数据源保持独立存储,但可被统一访问。
数据湖: 通常指存储海量原始数据的集中式存储系统(如 AWS S3、MinIO、阿里云 OSS 等),数据湖中的数据可能结构各异(结构化、半结构化、非结构化)。
2)核心价值:解决数据湖场景的三大痛点
| 痛点 | 传统方案的局限 | 联邦查询的解决方案 |
|---|---|---|
| 数据分散,无法统一分析 | 数据存储在对象存储、Hive、MySQL 等多处,需手动同步数据,耗时耗资源。 |
过统一 SQL 接口直接查询多源数据,如同时查询 S3 中的日志文件和 MySQL 中的业务数据。 |
| 数据格式复杂,查询困难 | 非结构化数据(如 JSON、日志)需先清洗转换为结构化格式才能分析。 |
支持直接解析多种格式数据(如 Parquet、ORC、JSON、CSV 等),无需预处理。 |
| 计算与存储耦合,资源浪费 | 数据迁移至计算引擎本地存储,占用大量存储资源,且无法复用原始数据。 | 计算与存储分离,查询时仅读取所需数据,减少存储成本和数据冗余 |
二、Doris 湖仓一体技术架构
1、整体架构
┌───────────────────────────────────────────────────────────┐
│ 用户接口层 │
│ (SQL Client / ODBC / JDBC / REST API / BI Tools) │
├───────────────────────────────────────────────────────────┤
│ 查询引擎层 │
│ (Parser → Planner → Optimizer → Vectorized Execution) │
├───────────────────────────────────────────────────────────┤
│ 存储引擎层 │
│ ┌───────────────┐ ┌───────────────────────────────────┐ │
│ │ 本地存储引擎 │ │ 外部存储连接器 │ │
│ │ (RowSet / Columnar) │ │ (HDFS / S3 / Iceberg / Hudi / Parquet) │ │
│ └───────────────┘ └───────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
2、核心组件
FE(Frontend):负责SQL解析、查询规划、元数据管理BE(Backend):负责数据存储、查询执行和计算Broker:外部存储连接器,支持HDFS、S3等MetaService:统一元数据管理,支持湖仓元数据互通
3、技术实现:联邦查询的核心组件与流程
1)关键技术组件
- 统一查询引擎:如
ApacheDoris、Trino(PrestoSQL)、SparkSQL等,提供标准化SQL接口。 - 数据源连接器(
Connector):适配不同存储系统的驱动(如S3Connector、HiveConnector、JDBCConnector等)。 - 查询优化器:自动规划跨源查询路径,减少数据传输量(如推下过滤条件到数据源执行)。
2)查询流程示例
用户提交SQL查询 → 引擎解析SQL → 通过Connector访问不同数据源 → 优化器规划执行计划(如并行查询S3和Hive)→ 结果合并返回
三、Doris 湖仓一体核心特性
1、外部表功能
Doris支持创建指向外部数据湖的 “外部表”,无需导入数据即可直接查询:
-- 创建指向 Hive 表的外部表
CREATE EXTERNAL TABLE hive_table (
id INT,
name STRING,
age INT
)
ENGINE=hive
PROPERTIES (
"hive.metastore.uris" = "thrift://hive-metastore:9083",
"database" = "default",
"table" = "user_table"
);
-- 直接查询外部表
SELECT * FROM hive_table WHERE age > 18;
2、数据湖格式支持
Doris 支持多种数据湖格式:
Parquet:默认列式存储格式,支持谓词下推ORC:高性能列式存储格式Iceberg:支持 ACID 事务和时间旅行查询Hudi:支持增量数据处理和数据湖索引
3、统一 SQL 接口
用户可以通过同一套 SQL 语法查询 Doris 内部表和外部湖表,无需关心数据存储位置:
-- 关联查询内部表和外部表
SELECT t1.id, t1.name, t2.order_amount
FROM internal_table t1
JOIN hive_table t2 ON t1.id = t2.user_id;
4、数据导入与导出
BrokerLoad:从HDFS/S3批量导入数据Stream Load:实时数据流导入(如Kafka、Pulsar)INSERT INTO:支持从外部表导入数据到 Doris 内部表
5、混合分析能力
支持在同一查询中同时处理热数据(
Doris本地存储)和冷数据(外部存储):
-- 冷热数据混合查询
SELECT *
FROM hot_data_table -- 热数据存储在 Doris
UNION ALL
SELECT *
FROM cold_data_external_table; -- 冷数据存储在 S3
6、Doris 湖仓一体应用场景
1) 企业级数据仓库
- 场景:整合企业内部分散在不同系统的数据
- 优势:统一查询接口,减少
ETL复杂度
2)实时数据分析
- 场景:结合
Kafka实时摄入数据,实时分析 - 优势:支持高并发、低延迟查询
3)历史数据分析
- 场景:分析历史归档数据(如年 / 季度报表)
- 优势:直接查询外部存储,无需导入
4)多源数据关联分析
- 场景:关联分析
Hive、Iceberg等不同数据源的数据 - 优势:统一
SQL接口,简化开发


