增加hudi 索引知识 #33

Merged
zeekling merged 2 commits from hudi into main 2023-10-06 09:46:39 +00:00
Showing only changes of commit beb5383dcc - Show all commits

View File

@ -142,11 +142,41 @@ Hudi采用多版本并发控制MVCC其中压缩操作合并日志和基
# 3. Hudi索引 # 3. Hudi索引
Hudi目前支持下面索引 Hudi 通过索引机制将给定的 hoodie keyrecord key + 分区路径映射到文件id从而提供高效的更新插入。
- Bloom索引采用根据记录key构建的布隆过滤器还可以选择使用记录key范围修剪候选文件。 一旦record的第一个版本写入文件record 的key和文件ID 之间的映射就不会改变。
- Simple索引针对从存储上的表中提取的键对传入的更新/删除记录执行精益联接。
- HBase索引将index信息保存到Hbase当中。 **对于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) ![pic](https://hudi.apache.org/cn/assets/images/Fact20tables-0255e82a96683124f7116060e9f76cbe.gif)
@ -162,5 +192,3 @@ Hudi 表的数据文件一般使用 HDFS 进行存储。从文件路径和类型
### 4.1.1 .hoodie文件 ### 4.1.1 .hoodie文件