首页标签分类
Hudi基本概念
2023-02-18 · 更新 2026-03-03约 3 分钟 · 644 字
大数据杂文记
000

目录

Hudi
优点
基本概念

Hudi

优点

  1. 高效的upsert
    比如hive需要修改某个字段的值的话,更多的使用insert overwreite 的语法实现覆盖写,而hudi则不需要
  2. 小文件的自动管理
    hudi会自动对小文件做一个compaction,实现小文件的合并操作,更智能
  3. 数据的格式更加开源化
    列式存储使用parquet,行式存储使用avro
  4. 流式处理和增量的批处理

基本概念

  1. 时间线
    timeline:记录对hudi表的操作(比如插入数据)
    • action(commit,delta commit)
    • time 比如时间戳20231223102354
    • state 记录action的状态(requested,inflight,completed)
  2. 文件布局
    表的元数据和数据存储在同一目录下,区别hive的元数据存储在mysql
  3. 索引
    能够实现高效upsert的原因:
    对比hive,假设现在要修改hive某个分区表的1号分区的数据,该分区下有100W条数据,多个文件,现在想要修改其中的100条记录,并新增100条记录 hive表的做法
  • 读出1号分区的所有数据
  • 对100W条数据中的100条数据修改
  • insert overwrite 1号分区 hudi cow表的做法:
  • 读取旧版本的parquet数据
  • 对旧partquet中其中100条数据更新
  • 和新增的100条记录合并形成新的parquet hudi mor表的做法:
  • 更新的100条记录写入新的parquet
  • 将需要更新的数据写入log文件
  • mor表后台根据设置的merge策略进行log和parquet的合并
  1. 表类型
  • copy on write
    hudi中数据存储有两种文件,parquet为历史存储数据,log为刚写入的日志数据,表进行分区(partition)后,再划分不同的文件组(filegroup)的概念,每个文件组中有多个文件片(fileslice)结合索引就可以实现多版本并发控制。
    cow表在写数据时,会将parquet中的数据进行拷贝一份,与新写入的数据做compact,形成新的parquet,之后形成新的文件片,可见cow表存储目录下只会有parquet文件,没有log文件。cow表适合读多写少的场景
  • read on merge
    在向mor表写数据时,每次写入都会产生增量文件,新写入的数据存入log文件中, 并根据索引将log放入指定的文件片(fileslice);当向mor表读取时,才会进行合并。可见mor表数据存储目录下可能同时存在parquet和log文件。mor适合写多读少的场景

本文作者:hedeoer

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!