数据湖之Hudi

一、简介

Hudi是Uber公司开源的数据湖架构,它是围绕数据库内核构建的流式数据湖。
Hudi设计文件存储和管理,数据模型有2种:COW和MOR
基本使用:

  • hudi底层的数据可以存储到hdfs
  • hudi的数据文件是parquet列式存储
  • hudi可以使用spark/flink 来消费 kafka消息队列的数据
  • hudi先将数据处理为 hudi 格式的 row tables (原始表),然后原始表被 Incremental ETL (增量处理)生成一张 hudi 格式的 derived tables(派生表)
  • hudi 支持的查询引擎有:hive、impala、spark等
    支持 spark、flink、map-reduce 等计算引擎继续对 hudi 的数据进行再次加工处理

二、数据存储结构

Hudi表的数据文件,一般使用HDFS进行存储。在HDFS种,一个Hudi表的存储文件分为两类。
数据湖之Hudi_第1张图片

  • .hoodie文件夹:存储文件合并操作的日志文件(每一次数据操作都会生成一个文件,这些文件会被陆续合并)
  • amricas和asia相关路径:存储实际的数据文件,按分区存储,分区的路径key可以指定
  • Hudi把随着时间流逝,对表的一系列CRUD操作叫做Timeline(Timeline来解决因为延迟造成的数据时序问题),Timeline中某一次的操作,叫做Instant。Instant包含Instant Action(数据提交COMMITS、文件合并COMPACTION、文件清理CLEANS),Instant Time(本次操作发生的时间),State(操作的状态:发起REQUESTED、进行中INFLIGHT、已完成COMPLETED)

三、数据模型

COW

写时复制Copy on Write,它是在数据写入的时候,复制一份原来文件作为拷贝,在拷贝文件上更新或添加新数据,这个拷贝文件就只包含最新的数据了。
COW表主要使用 列式文件格式(Parquet) 存储数据,在写入数据过程中,执行同步合并。
数据湖之Hudi_第2张图片

MOR

读时合并Merge On Read,新插入的数据存储在delta log 中,定期再将delta log合并进行parquet数据文件。
读取数据时,会将delta log跟老的数据文件做merge,得到完整的数据返回。
MOR表使用 列式(parquet)与行式(avro) 文件混合的方式存储数据。
READ OPTIMIZED 模式下,正在读数据的请求,读取的是最近建立的副本文件,即最新的合并数据。
数据湖之Hudi_第3张图片

Hudi查询

  • Snapshot Queries(快照查询)
    动态合并最新的文件,提供实时数据
  • Incremental Queries(增量查询)
    仅查询新写入数据集的文件,需要指定一个Commit/Compaction的即时时间(位于Timeline上的某个instant)作为条件,来查询此条件之后的新数据
  • Read Optimized Queries(读优化查询)
    直接查询数据集的最新快照,提供离线数据

你可能感兴趣的:(Hadoop,大数据,hadoop)