16

Apache Hudi索引实现分析(二)之HoodieGlobalBloomIndex

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIyMzQ0NjA0MQ%3D%3D&%3Bmid=2247484576&%3Bidx=1&%3Bsn=10ca56b1d8c22cd61e832377327c2680
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1. 介绍

前面分析了Hudi默认的索引实现HoodieBloomIndex,其是基于分区记录所在文件,即分区路径+recordKey唯一即可,Hudi还提供了HoodieGlobalBloomIndex的实现,即全局索引实现,只需要recordKey唯一即可,下面分析其实现。

2. 分析

HoodieGlobalBloomIndex是HoodieBloomIndex的子类,其主要重写了父类的如下几个方法

对于加载分区下所有最新文件而言, loadInvolvedFiles 核心代码如下

首先会获取所有的分区路径,然后调用父类方法获取分区下最新数据文件。

对于查找记录对应的文件而言, explodeRecordRDDWithFileComparisons 核心代码如下

可以看到和 HoodieBloomIndex#explodeRecordRDDWithFileComparisons 处理逻辑类似,在使用索引过滤器获取所有匹配的文件和分区路径时,此时比较的是所有分区下的文件,不再是指定的分区路径。

对于将位置信息推回至原始记录而言, tagLocationBacktoRecords 核心代码如下

其处理逻辑与父类处理逻辑相同,也是使用一次左外连接将位置信息推回至原始记录。

3. 总结

对于 HoodieGlobalBloomIndex 而言,其是全局的索引,即会在所有分区内查找指定的recordKey,而非像 HoodieBloomIndex 只在指定的分区内查找,同时在加载分区下所有最新文件时,其会首先获取所有分区,然后再获取所有分区下的最新文件,而非使用从原始记录中解析出来的分区路径。

eiuIjey.png!web

BFFbMbf.jpg!web

jM3Mvie.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK