
# Hudi表概述
在大数据场景中，传统HDFS文件系统以只读方式存储数据，难以直接支持数据的更新和删除操作。当用户需要对数据湖中的数据进行频繁的增删改查时，传统方案需要重写整个文件，效率较低。Hudi（Hadoop Upserts Deletes and Incrementals）是一种数据湖的存储格式，在Hadoop文件系统之上提供了更新数据和删除数据的能力以及消费变化数据的能力。支持多种计算引擎，提供IUD接口，在HDFS的数据集上提供了插入更新和增量拉取的功能。它支持多种计算引擎，提供IUD（Insert/Update/Delete）接口，在HDFS的数据集上实现了插入更新和增量拉取功能。
图1Hudi基本架构   
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001426022834.png "点击放大")
#### Hudi表类型
- Copy On Write 写时复制表也简称COW表，使用Parquet文件存储数据，内部的更新操作需要通过重写原始Parquet文件完成。
  适用场景：读多写少的场景，如数据湖报表、交互式分析等。
  - 优点：读取性能优异，只需读取对应分区的单个数据文件。文件结构简单，无碎片化问题。
  
  - 缺点：数据写入的时候，需要复制一个先前的副本再在其基础上生成新的数据文件，这个过程比较耗时。数据写入存在延迟，读取到的可能是稍早的数据版本。
   

- Merge On Read 读时合并表也简称MOR表，使用列格式Parquet和行格式Avro两种方式混合存储数据。其中Parquet格式文件用于存储基础数据，Avro格式文件（也可叫做log文件）用于存储增量数据。
  适用场景：写多读少的场景，如实时同步、实时数仓入湖等。
  - 优点：写入性能优异，增量数据先写入轻量的日志文件。写入成本较低，适合高频写入场景。
  
  - 缺点：增量日志持续堆积会生成大量碎片化小文件，必须定期执行 Compaction（文件压缩合并）任务，整合 Avro 增量日志与基准 Parquet 文件，运维成本更高。业务读取数据时，需实时加载基准Parquet存量数据、拼接合并全部增量Avro日志，额外增加计算开销，文件IO与计算负载更高。
   
 
#### Hudi表存储
Hudi在写入数据时会根据设置的存储路径、表名、分区结构等属性生成Hudi表。
Hudi表的数据文件，可以使用操作系统的文件系统存储，也可以使用HDFS这种分布式的文件系统存储。为了后续分析性能和数据的可靠性，一般使用HDFS进行存储。以HDFS存储来看，一个Hudi表的存储文件分为两类。
使用具有HDFS管理权限的用户登录MRS集群Manager页面，选择"集群 \> 服务 \> HDFS"，在"概览"页面单击NameNode WebUI后的链接，进入到HDFS的WebUI界面，选择"Utilities \> Browse the file system"，即可查看Hudi表。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724747557.png "点击放大")
- ".hoodie"文件夹中存放了对应的文件合并操作相关的日志文件。 ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676748366.png "点击放大")
  
- 包含_partition_key相关的路径是实际的数据文件和metadata，按分区存储。 Hudi的数据文件使用Parquet文件格式的base file和Avro格式的log file存储。
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676908066.png "点击放大")
  
 
