
1) 【一句话结论】:企业级大数据平台采用“数据湖-数据湖屋-数据仓库”三层架构,数据湖存储原始多源数据,数据湖屋实现数据治理与转换,数据仓库提供结构化分析视图,通过分层解耦实现存储、处理、分析的分离。
2) 【原理/概念讲解】:
数据湖(Data Lake)是“数据水库”,存储原始、半结构化、非结构化数据,无预设模式,类似水库存不同水源的水(未处理),适合海量异构数据存储。数据仓库(Data Warehouse)是“数据湖泊”,面向分析,有模式,数据经过清洗、整合,类似水库处理后供饮用(结构化),适合OLAP查询。分层架构逻辑:数据湖作为基础层,存储原始数据;数据湖屋(中间层)负责数据治理(元数据管理、数据质量、安全)与转换(ETL/ELT);数据仓库作为分析层,提供结构化视图,支持复杂分析(如BI、报表)。分层的好处是解耦存储与处理,满足不同场景(原始数据存储 vs 分析查询)。
3) 【对比与适用场景】:
| 概念 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 数据湖 | 存储原始多源数据(结构化/半结构化/非结构化)的存储层 | 无模式,可扩展,存储原始数据 | 原始数据存储、数据探索、机器学习数据源 | 存储成本高,数据治理弱 |
| 数据仓库 | 面向分析的、结构化的数据存储 | 有模式,数据经过清洗整合,支持OLAP | 商业分析、报表、复杂查询 | ETL成本高,扩展性受限于模式 |
4) 【示例】:以电商场景为例,数据流转逻辑:
# 伪代码:数据湖屋ETL流程
def etl_from_data_lake():
# 1. 读取数据湖中的原始数据
raw_orders = spark.read.format("parquet").option("path", "s3://data-lake/orders").load()
raw_logs = spark.read.format("json").option("path", "s3://data-lake/logs").load()
# 2. 数据清洗与转换
cleaned_orders = raw_orders.filter("order_status != 'cancelled'")
parsed_logs = raw_logs.select(
col("user_id").alias("user_id"),
col("product_id").alias("product_id"),
col("timestamp").alias("event_time")
)
# 3. 加载到数据湖屋(Delta Lake)
cleaned_orders.write.format("delta").mode("overwrite").save("s3://data-lake-house/orders")
parsed_logs.write.format("delta").mode("append").save("s3://data-lake-house/logs")
# 4. 加载到数据仓库
spark.read.format("delta").option("path", "s3://data-lake-house/orders").write.format("snowflake").save("warehouse.orders")
5) 【面试口播版答案】:
“面试官您好,关于企业级大数据平台的分层架构设计,我建议采用‘数据湖-数据湖屋-数据仓库’的三层架构。核心逻辑是:数据湖作为基础层存储原始多源数据(结构化/半结构化/非结构化),数据湖屋作为中间层负责数据治理(元数据管理、数据质量监控)和转换(ETL/ELT),数据仓库作为分析层提供结构化视图用于商业分析。技术选型上,数据湖可选用HDFS+Hive/Spark,数据湖屋用Delta Lake+Airflow/Spark,数据仓库选Snowflake/ClickHouse。数据流转逻辑是从数据湖读取原始数据,经数据湖屋清洗转换后加载到数据仓库,再通过BI工具分析。这样分层能解耦存储与处理,满足不同场景需求。”
6) 【追问清单】:
7) 【常见坑/雷区】: