From beb5383dcca65c3f33addcd8a22132c2fd92e20c Mon Sep 17 00:00:00 2001 From: zeekling Date: Fri, 6 Oct 2023 17:40:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Hudi=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9F=A5=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hudi/README.md | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/hudi/README.md b/hudi/README.md index f3e59d4..0f384fe 100644 --- a/hudi/README.md +++ b/hudi/README.md @@ -142,11 +142,41 @@ Hudi采用多版本并发控制(MVCC),其中压缩操作合并日志和基 # 3. Hudi索引 -Hudi目前支持下面索引: -- Bloom索引:采用根据记录key构建的布隆过滤器,还可以选择使用记录key范围修剪候选文件。 -- Simple索引:针对从存储上的表中提取的键对传入的更新/删除记录执行精益联接。 -- HBase索引:将index信息保存到Hbase当中。 -- 自定义索引:自定义实现的索引。 +Hudi 通过索引机制将给定的 hoodie key(record key + 分区路径)映射到文件id,从而提供高效的更新插入。 +一旦record的第一个版本写入文件,record 的key和文件ID 之间的映射就不会改变。 + +**对于COW表来讲**: +可以避免扫描整个文件系统,达到支持快速upsert/delete操作。 + + +**对于MOR表来讲**: +允许限制base文件中需要合并的records的数量。对于一个base文件只需要根据当前base文件的record的跟新等进行合并。 + +Comparion cost对比: + +![pic](https://hudi.apache.org/cn/assets/images/with-and-without-index-81d481917e61e4cd1be2426c12994b8b.png) + + + +Hudi支持的索引如下: + +| 名称 | 备注 | +|---|---| +| Bloom索引 | 采用根据记录key构建的布隆过滤器,还可以选择使用记录key范围修剪候选文件。 | +| GLOBAL_BLOOM索引 | 与Boolm索引类似,但是作用范围是全局 | +| Simple索引 | 针对从存储上的表中提取的键对传入的更新/删除记录执行精益联接。| +| GLOBAL_SIMPLE索引 | 与Simple类似,但是作用范围是全局 | +| HBase索引 | 将index信息保存到Hbase当中。 | +| INMEMORY索引 | 在Spark、Java程序、Flink的内存中保存索引信息,Flink和Java默认使用当前索引 | +| BUCKET索引 | 使用桶hash的方式定位文件组,在大数据量情况下效果较好。可以通过`hoodie.index.bucket.engine`指定bucket引擎。 | +| RECORD_INDEX索引 | 索引将record的key保存到 Hudi元数据表中的位置映射。 | +| 自定义索引 | 自定义实现的索引。 | + + +BUCKET索: +- SIMPLE(default): 每个分区的文件组使用固定数量的存储桶,无法缩小或扩展。同时支持COW和MOR表。由于存储桶的数量无法更改且存储桶和文件组之间采用一对一映射,因此该索引不太适合数据倾斜的情况。 +- CONSISTENT_HASHING: 支持动态数量的存储桶,可以根据存储桶的大小调整桶的数量。 + ![pic](https://hudi.apache.org/cn/assets/images/Fact20tables-0255e82a96683124f7116060e9f76cbe.gif) @@ -162,5 +192,3 @@ Hudi 表的数据文件一般使用 HDFS 进行存储。从文件路径和类型 ### 4.1.1 .hoodie文件 - -