Hudi 的索引是 hoodiekey 到文件组(File Group)或者文件 ID(File ID)的映射,hoodiekey 由 recordkey 和 partitionpath 两部分组成。
定义在文件 HoodieIndex.java 中。
分一下几种:
类型 |
说明 |
SIMPLE |
简单索引,分区内唯一所以,把 update 和 delete 操作的新数据和老数据进行 join,性能比较差 |
GLOBAL_SIMPLE |
简单索引,全局唯一索引 |
BUCKET |
桶所以,通过 hoodie.index.bucket.engine 设置桶索引类型 |
FLINK_STATE |
Flink 专用索引,内存需求同索引数量成正比 |
INMEMORY |
使用 hashmap 作为索引 |
BLOOM |
布隆索引,仅限单个分区内唯一 |
GLOBAL_BLOOM |
布隆索引,所有分区唯一 |
HBASE |
使用外部的 HBase 存储索引,为全局唯一索引 |
自定义索引 |
实现接口 HoodieIndex,设置 hoodie.index.class 来应用 |
@EnumDescription("Determines how input records are indexed, i.e., looked up based on the key "
+ "for the location in the existing table. Default is SIMPLE on Spark engine, and INMEMORY "
+ "on Flink and Java engines.")
public enum IndexType {
HBASE,
INMEMORY,
BLOOM,
GLOBAL_BLOOM,
SIMPLE,
GLOBAL_SIMPLE,
BUCKET,
FLINK_STATE
}
从 hudi-0.13.0 版本开始,BUCKET 类型的索引又分为两种:
分类 |
说明 |
限制 |
SIMPLE |
固定桶数 |
无 |
CONSISTENT_HASHING |
动态桶数 |
仅 MOR 表可用 |
配置项名 |
默认值 |
说明 |
引入版本 |
hoodie.index.type |
默认值和引擎有关,Flink上默认值为FLINK_STATE,Spark上默认值为SIMPLE,Java应用的默认值为INMEMORY |
索引类型,可取值:HBASE、INMEMORY、BLOOM、GLOBAL_BLOOM、SIMPLE、GLOBAL_SIMPLE、BUCKET、FLINK_STATE |
|
hoodie.index.class |
"" |
指定索引类,必须为 HoodieIndex 的子类,自带的有 SparkHoodieHBaseIndex、HoodieBloomIndex、FlinkInMemoryStateIndex、HoodieSimpleBucketIndex、HoodieSparkConsistentBucketIndex |
|
配置项名 |
默认值 |
说明 |
引入版本 |
hoodie.index.bloom.num_entries |
60000 |
布隆索引配置,指定布隆槽数 |
|
hoodie.index.bloom.fpp |
0.000000001 |
布隆精度 |
|
hoodie.bloom.index.parallelism |
0 |
布隆并行查询数,0 表示根据负载自动 |
|
hoodie.bloom.index.use.caching |
true |
是否缓存布隆的计算 |
|
hoodie.bloom.index.filter.type |
DYNAMIC_V0 |
布隆过滤器类型,可选 DYNAMIC_V0 或 SIMPLE |
|
hoodie.bloom.index.keys.per.bucket |
10000000 |
|
|
配置项名 |
默认值 |
说明 |
引入版本 |
hoodie.simple.index.use.caching |
true |
|
|
hoodie.simple.index.parallelism |
0 |
|
|
hoodie.global.simple.index.parallelism |
100 |
|
|