数据湖三剑客Delt Lake、Hudi、Iceberg详解
数据湖基本概念和发展历史
Hadoop
- 数据湖最开始的概念---分布式存储HDFS
- 好处:同一公司/组织可以使用共享存储;数据访问方便,灵活性高
- 坏处:没有记录文件的schema、难以得知数据集包含哪些文件,是通过什么样的分区组织的、如果多个程序都在修改这个数据集,其他程序难以配合做修改
Hive
- 数据湖的演进---Hive Metastore(元数据存入mysql中)
- 对数据湖中的数据集进行集中定义
- 问题:
- 静态表------读取方便,有写操作,不同用户读取的文件可能不同(读写冲突、写写冲突)
- 对于schema数据,只能在尾列后面增加列而不能删除或修改列------------重写一张表(支持更多样的schema变更)
湖仓一体
数据仓库
- 数据仓库将数据从数据源提取和转换,加载到目的地
- 数据仓库存储+计算不分离
- 数据仓库严格控制写入数据的schema
数据仓库vs数据湖
数据仓库 | 数据湖(阶段2) | |
---|---|---|
成本 | 高 | 低 |
存储计算分离 | 否 | 是 |
ACID | 是 | 否 |
湖仓一体
- 结合数据湖和数据仓库的优势
- 将数据仓库中对于数据的严格管理直接实现到了低成本的分布式存储上
- 特点:ACID、Schema管理、存储计算分离、支持多种计算引擎和文件格式
数据湖核心技术
Time Travel
更新数据,新数据和旧数据同时跑一下训练
- 每次写入都生成一个新的元数据文件,记录变更(以递增版本号命名,记录本次新增/删除的文件)
- 分区数据在Update时,不删除旧数据,保证新旧共存
- 元数据中存储具体的文件路径,而不仅仅是分区文件夹
- 每当产生N个json,做一次聚合,记录完整的分区文件信息
- 用checkpoint记录上次做聚合的版本号
ACID Transaction
解决多用户的写写冲突、读写冲突
- 一致性:输入是什么,落盘就是什么(计算引擎保证)
- 持久性:落完数据后,即便服务器重启结果不变(存储引擎保证)
- 原子性:本次写入要么对用户可见,要么不可见(需要设计)
- 写入流程:先写parquet数据文件、写入json文件(hash,rename;rename成功视为commit)
- 从用户可见性入手确保原子性,解决读写冲突
事务隔离:正确解决读写冲突和写写冲突(需要设计)
- 同时update/delete和Insert才会产生冲突
- Update写入流程:
- 乐观锁把文件全部落盘,进入写json阶段
- 版本号未增加,直接写新版本;否则看新版本更新的分区和自己更新的分区是否一样,不一样直接写新版本,否则重新update操作
Schema Evolution
删除列(手机号)
- 用户并不直接读取parquet文件本身,而是通过数据湖接口读取
- 数据湖内部会读取应该读的parquet,并在schema上做进一步处理
- ID将data和metadata的列名做一一对应
- 唯一确定的ID,新增列赋予新ID,删列ID不复用
- 写入数据时,ID也写入数据文件
- 读取数据时,用ID做映射
- Data中没有,metadata中有:ADD
- Data中有,metadata中没有:DROP
- Data和metadata中都有同一ID,但是name不同:RENAME
- 如果都有同一列名,而ID不同:先删后加
数据湖三剑客特点
Iceberg
- 传统的分区:数据中包含date列,按照date分区,如果希望按照hour分区,需要新增hour列
- 数据中包含timestamp列,设置好partition transform方式,iceberg会转换为对应的分区
- 按需进行partition evolution
Hudi
- Timeline Service:记录的信息类似于metadate
- Upsert:update、insert
- Incremental:某个时间点后新增的数据
- Copy on Write
- 在更新一个分区时,将原来的数据全部读出做加工(更新)再全部写进去
- 缺陷:有时候只是更新几列数据,但是需要把数据全部读出来
Merge on Read
- 原始数据更新部分写入单独文件,读取时原始文件和小文件都读,以PK做merge
Delta Lake
- 流批一体
- 三个数据湖异同
总结:数据湖是一个不断更新的概念,最新发展状态是湖仓一体,重点了解目前业界三大数据湖的特点和代表性技术。
数据湖三剑客Delt Lake、Hudi、Iceberg详解相关推荐
- 开源数据湖方案选型:Hudi、Delta、Iceberg深度对比
文章目录 前言: 共同点 一.Databricks 和 Delta 1.1.Delta的意图,解决的疼点 1.没有 Delta 数据湖之前存在的问题 : 二.Uber和Apache Hudi 三.Ne ...
- 什么是数据湖(Data Lake)?
什么是数据湖(Data Lake)? 有些东西就是概念,故弄玄虚, just fancy names wikipedia: A data lake is usually a single store ...
- 认识数据湖加速器(Data Lake Accelerator Goose FileSystem,GooseFS)
认识数据湖加速器Data Lake Accelerator Goose FileSystem,GooseFS 一.产品概述 二.产品功能 三.产品优势 四.快速入门 五.使用 GooseFS 预热 T ...
- 03 mysql数据查询_MySql学习day03:数据表之间的连接、查询详解
主键: 关键字:primary key 特点:不能为null,并且唯一. 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参与实 ...
- Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解
Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解 关于expdp和impdp 使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户 ...
- python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解
Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...
- 《数据修复技术与典型实例实战详解》——1.4 分区表的修复
本节书摘来自异步社区<数据修复技术与典型实例实战详解>一书中的第1章,第1.4节,作者:叶润华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 分区表的修 ...
- 火星遥感数据的获取与处理工具安装详解
火星遥感数据的获取与处理工具安装详解 文章目录 火星遥感数据的获取与处理工具安装详解 前言 1.火星遥感影像数据下载网址 2.火星遥感影像数据处理工具 前言 不知道有没有和我一样想做点跟火星相关的小实 ...
- mysql删除重复数据只保留一条_mysql查找删除重复数据并只保留一条实例详解
有这样一张表,表数据及结果如下: school_id school_name total_student test_takers 1239 Abraham Lincoln High School 55 ...
最新文章
- transform 遇上 position: fixed
- PHP获取用户地址方法
- Angular self study 1 - Bootstrap
- thinkphp 助手函数url不生成https_thinkphp5.0 URL 地址生成
- 设计模式基于C#的工程化实现及扩展
- PHP7.2的安装与配置(win7)
- ElasticSearch面试 - es 生产集群的部署架构是什么?
- Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
- 心跳脑裂解决方案之Heartbeat的Stonith配置
- C语言中多维数组的内存分配和释放(malloc与free)(转)
- Linux下安装gcc和g++
- 作为PHP开发者请务必了解Composer
- 4600显卡linux驱动,下载:NVIDIA显卡Linux驱动304.64版
- 检索汉字拼音,实用工具类
- 自媒体月入过万的自媒体赚钱工具,免费教会你!
- 关于广告投放系统:竞价策略(2018)
- 加拿大渥太华民众寒冬享受运河滑冰道乐趣
- Python selenium —— selenium与自动化测试成神之路
- npm与package.json详解
- Android录制桌面视频screenrecord
热门文章
- 关于手机信号强度单位db和dBm
- js 实现 图片刷新 验证码 看不清 换一张
- 数字语言,简历的“含金量”
- 论文翻译——Rapid 2D-to-3D conversion——快速2D到3D转换
- 算法设计与分析——动态规划(二):钢条切割
- 领导说“辛苦了”,千万别回“应该的”, 这是我听过最扎心的答案了!
- 注销公司是否需要办理注销呼叫中心许可证?
- P2916 [USACO08NOV]安慰奶牛Cheering up the Cow
- 网络相册(只能本地)
- 语言模型及RNN模型