Hudi-数据写操作流程

概述

在hudi数据湖框架中支持三种方式写入数据:UPSERT(插入更新)、INSERT(插入)和BULK INSERT(写排序)
UPSERT:默认行为,数据先通过index打标(INSERT/UPDATE),有一些启发式算法决定消息的组织以优化文件的大小
INSERT:跳过index,写入效率更高
BULK_INSERT:写排序,对大数据量额hudi表初始化友好,对文件大小的限制best effort(写HFile)
 

UPSERT写入流程

COW类型表,UPSERT写入流程

1.先对records按照record key去重
2.首先对这批数据创建索引(HoodieKey => HoodieRecordLocation),根据record key和分区路径构建索引;通过索引区分哪些records是update,哪些records是insert(key第一次写入)
3.对于update消息,会直接找到对应key所在的最新FileSlice的base文件,并做merge后写新的base file(新的FileSlice)
4.对于insert消息,会扫描当前partition的所有SmallFile(小于一定大小的base file),然后merge写新的FileSlice,如果没有SmallFile,直接写信的FileGroup + FileSlice;
 

MOR类型表,UPSERT写入流程

1.先对records按照record key去重
2.首先对这批数据创建索引(HoodieKey => HoodieRecordLocation),根据record key和分区路径构建索引;通过索引区分哪些records是update,哪些records是insert(key第一次写入)
3.如果是insert消息
    A.如果log file不可建索引(默认),会尝试merge分区内最小的base file(不包含log file的FileSlice),生成新的FileSlice;如果没有base file就新写一个FileGroup + FileSlice + base file
    B.如果log file可建索引,尝试append小的log file,如果没有就新写一个FileGroup + FileSlice + base file
4.如果是update消息,写对应的FileGroup + FileSlice,直接append最新的log file(如果碰巧是当前最小的文件,会merge base file,生成新的FileSlice)log file大小达到阈值会roll over一个新的

INSERT写入流程

COW类型表,INSERT写入流程

1.先对records按照record key去重(可选)
2.不会创建index
3.如果有小的base file文件,merge base file,生成新的FileSlice + base file,否则直接写新的FileSlice + base file
 

MOR类型表,INSERT写入流程

1.先对records按照record key去重(可选)
2.不会创建index
3.如果log file可索引,并且有小的FileSlice,尝试追加或写最新的log file;如果log file不可索引,写一个新的FileSlice + base file 
 

posted on   嘣嘣嚓  阅读(1085)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2020-02-26 机器学习-矩阵空间的变换
2017-02-26 echarts如何显示在页面上
2017-02-26 mybatis提取<where><if>共用代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示