题目
解释数据湖的基本概念及其与传统数据仓库的主要区别
信息
- 类型:问答
- 难度:⭐
考点
数据湖定义,数据湖与数据仓库区别,数据湖核心特征
快速回答
数据湖的核心要点:
- 定义:集中存储原始数据的系统,支持结构化/半结构化/非结构化数据
- 存储方式:按原始格式存储(如Parquet/JSON/CSV),模式在读取时定义(Schema-on-Read)
- 关键区别:
- 数据仓库存储清洗后的结构化数据,数据湖保留原始数据
- 数据仓库需要预定义模式(Schema-on-Write),数据湖更灵活
- 数据湖成本更低且支持更丰富的数据类型
1. 数据湖核心原理
数据湖是一个集中式存储库,允许以原始格式存储任意规模的数据(结构化、半结构化、非结构化)。核心设计原则:
- Schema-on-Read:写入时不强制定义数据结构,分析时按需解析
- 低成本存储:通常基于对象存储(如AWS S3、Azure Blob Storage)
- 多计算引擎支持:Spark/Presto/Hive等均可直接访问原始数据
2. 与数据仓库的关键区别
| 对比维度 | 数据湖 | 数据仓库 |
|---|---|---|
| 数据类型 | 支持所有类型(日志/图片/JSON等) | 仅结构化数据 |
| Schema策略 | Schema-on-Read(读时定义) | Schema-on-Write(写时定义) |
| 存储成本 | 低(原始格式存储) | 较高(需ETL处理) |
| 处理延迟 | 支持实时+批处理 | 通常批处理为主 |
3. 最佳实践示例
数据写入代码(Python + PySpark):
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("DataLakeIngest").getOrCreate()
# 原始JSON数据直接写入数据湖(无模式转换)
raw_data = spark.read.json("s3://raw-bucket/logs/*.json")
raw_data.write.parquet("s3://data-lake/raw/logs/") # 转换为列式存储格式最佳实践:
- 使用Parquet/ORC等列式格式提升查询性能
- 按业务分区存储(如
s3://data-lake/sales/year=2023/month=08/) - 元数据管理工具(如AWS Glue Data Catalog)
4. 常见错误
- 数据沼泽:缺乏元数据管理导致数据无法查找
- 过度存储:保留无价值的原始数据造成成本浪费
- 安全疏忽:未设置细粒度访问控制(如S3桶策略错误)
5. 扩展知识
- 现代架构:Lakehouse架构(Delta Lake/Iceberg)结合湖与仓优势
- 典型组件:
- 存储层:S3/ADLS/HDFS
- 元数据层:Hive Metastore/AWS Glue
- 计算层:Spark/Trino/Flink