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

大数据面试问答-数据湖

1. 概念

数据湖(Data Lake):
以原始格式(如Parquet、JSON等)存储海量原始数据的存储库,支持结构化、半结构化和非结构化数据(如文本、图像)。采用Schema-on-Read模式,数据在读取时才定义结构,适合机器学习、探索性分析等场景。

2. 与数仓对比

维度数据仓库数据湖
数据存储处理后的结构化数据原始数据(结构化/半结构化/非结构化)
Schema处理Schema-on-Write(写入时定义结构)Schema-on-Read(读取时定义结构)
处理流程ETL(提取-转换-加载)ELT(提取-加载-转换)
用户群体业务分析师、BI工程师数据科学家、数据工程师
查询性能高性能,优化用于复杂查询依赖计算引擎(如Spark),灵活性高
扩展性垂直扩展为主,成本较高水平扩展,成本较低(基于对象存储)
数据治理严格的数据质量与元数据管理需额外治理(易成“数据沼泽”)
典型技术栈Snowflake、Redshift、BigQuery(现代云数据仓库)AWS S3、Azure Data Lake + Spark/Hive

数据仓库的治理是“被动”的(写入时已结构化),而数据湖的治理是“主动”的(需额外定义元数据和质量规则)。两者的治理目标一致,但数据湖的治理复杂度更高。

2.1 优缺点分析

数据仓库
优点:数据一致性强、查询高效、易于业务用户使用。
缺点:扩展成本高、灵活性差,难以处理非结构化数据。

数据湖
优点:存储成本低、支持多样数据类型、适合探索性分析。
缺点:缺乏内置治理,需额外工具管理元数据和质量(如Apache Atlas、AWS Glue)。

2.2 应用场景

数据仓库:
定期生成标准化报表(如销售月报)。
需要高性能聚合查询的OLAP场景。

数据湖:
机器学习模型训练(需原始数据)。
日志分析、IoT设备数据存储等非结构化处理。

3. Delta Lake与Apache Hudi

两者均属于Lakehouse技术,旨在为数据湖添加数据仓库的管理能力,解决传统数据湖的痛点:
ACID事务:支持并发写入和读一致性。
数据版本控制:时间旅行(Time Travel)功能。
更新/删除:支持CDC(Change Data Capture)场景。
优化查询性能:通过索引、压缩等技术加速分析。

3.1 Delta Lake

背景:由Databricks开源,深度集成Spark生态。

核心功能:
事务日志:通过JSON事务日志(Delta Log)记录所有操作,实现ACID。
Schema演进:支持自动合并Schema变更(如新增列)。
优化工具:OPTIMIZE命令压缩小文件,Z-Order优化数据布局。

用例:
流批一体处理(同一张表同时支持流式写入和批量分析)。
机器学习特征存储(支持版本回滚)。

# 将数据保存为Delta格式  
df.write.format("delta").save("/data/events")  
# 时间旅行查询  
spark.read.format("delta").option("versionAsOf", 10).load("/data/events")  

3.2 Apache Hudi

背景:由Uber开源,强调高效的增量更新和删除。
核心功能:
索引机制:支持布隆过滤器、HBase索引等,快速定位数据文件。
表类型:
Copy-on-Write:更新时重写文件(适合读多写少)。
Merge-on-Read:更新时追加日志文件(适合写密集场景)。

用例:
数据库CDC同步(如MySQL Binlog入湖后更新Hudi表)。
实时数据湖(支持低延迟写入)。

// 写入Hudi表  
hoodieWriteConfig = HoodieWriteConfig.newBuilder().withPath("/data/events").build();  
JavaRDD<HoodieRecord> records = ...;  
client.upsert(records, commitTime);  
http://www.xdnf.cn/news/252631.html

相关文章:

  • 阿里云服务器 篇五(加更):短链服务网站:添加反垃圾邮件功能
  • 多模态大语言模型arxiv论文略读(五十五)
  • Python爬虫实战:获取好大夫在线各专业全国医院排行榜数据并分析,为患者就医做参考
  • sys目录介绍
  • C++11新特性_标准库_正则表达式库
  • 数据分析_问题/优化
  • Mysql数据库之基础管理
  • 基于SpringBoot的药房药品销售管理系统
  • 深入解析C++11委托构造函数:消除冗余初始化的利器
  • Webug4.0靶场通关笔记13- 第22关越权修改密码
  • 从此,K8S入门0门槛!
  • Qt QGraphicsScene 的用法
  • openEuler 22.03 安装 Mysql 5.7,RPM 在线安装
  • C++ - 数据容器之 list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
  • 父子组件双向绑定
  • ElasticSearch深入解析(八):索引设置、索引别名、索引模板
  • Windows配置grpc
  • 红米Note9 4G版拆开后盖操作细节
  • 51c嵌入式~电路~合集4
  • Ubuntu搭建Conda+Python开发环境
  • 【AI面试准备】Azure DevOps沙箱实验全流程详解
  • 【KWDB 创作者计划】利用KWDB解决工业物联网场景中的海量数据管理难题的思考
  • 处方流转平台权限控制模块设计(基于RBAC模型)
  • Midjourney 绘画 + AI 配音:组合玩法打造爆款短视频!
  • Notion 系列(一):页面与数据库的结构化实践
  • [Android] 网易爆米花TV 2.0.0.0429(原网易Filmly,支持多网盘的TV版、电脑版带海报墙播放器)
  • 【Java IO流】IO流详解
  • 【Linux】PetaLinux开发
  • 一个读写excel的简单程序(golang)
  • 云原生后端架构的优势与最佳实践