Apache Hudi索引实现分析(二)之HoodieGlobalBloomIndex
2014 年 3 月 2 日
1. 介绍
前面分析了Hudi默认的索引实现HoodieBloomIndex,其是基于分区记录所在文件,即分区路径+recordKey唯一即可,Hudi还提供了HoodieGlobalBloomIndex的实现,即全局索引实现,只需要recordKey唯一即可,下面分析其实现。
2. 分析
HoodieGlobalBloomIndex是HoodieBloomIndex的子类,其主要重写了父类的如下几个方法
对于加载分区下所有最新文件而言, loadInvolvedFiles
核心代码如下
首先会获取所有的分区路径,然后调用父类方法获取分区下最新数据文件。
对于查找记录对应的文件而言, explodeRecordRDDWithFileComparisons
核心代码如下
可以看到和 HoodieBloomIndex#explodeRecordRDDWithFileComparisons
处理逻辑类似,在使用索引过滤器获取所有匹配的文件和分区路径时,此时比较的是所有分区下的文件,不再是指定的分区路径。
对于将位置信息推回至原始记录而言, tagLocationBacktoRecords
核心代码如下
其处理逻辑与父类处理逻辑相同,也是使用一次左外连接将位置信息推回至原始记录。
3. 总结
对于 HoodieGlobalBloomIndex
而言,其是全局的索引,即会在所有分区内查找指定的recordKey,而非像 HoodieBloomIndex
只在指定的分区内查找,同时在加载分区下所有最新文件时,其会首先获取所有分区,然后再获取所有分区下的最新文件,而非使用从原始记录中解析出来的分区路径。