• 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 
     
  • 相关阅读:
    [LuoGu] P1004 方格取数
    [LuoGu] P1018 乘积最大
    [LuoGu] P2758 编辑距离
    [JZOJ] 01知多少
    [LuoGu] P1731 生日蛋糕
    $mathcal{Const,Inline,Register}$用法总结
    T2027 蜈蚣
    T57274 黑暗城堡
    P2312 解方程
    AT2412 最大の和
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/15940692.html
Copyright © 2020-2023  润新知