内容简介:前面分析了Hudi默认的索引实现HoodieBloomIndex,其是基于分区记录所在文件,即分区路径+recordKey唯一即可,Hudi还提供了HoodieGlobalBloomIndex的实现,即全局索引实现,只需要recordKey唯一即可,下面分析其实现。HoodieGlobalBloomIndex是HoodieBloomIndex的子类,其主要重写了父类的如下几个方法对于加载分区下所有最新文件而言,
1. 介绍
前面分析了Hudi默认的索引实现HoodieBloomIndex,其是基于分区记录所在文件,即分区路径+recordKey唯一即可,Hudi还提供了HoodieGlobalBloomIndex的实现,即全局索引实现,只需要recordKey唯一即可,下面分析其实现。
2. 分析
HoodieGlobalBloomIndex是HoodieBloomIndex的子类,其主要重写了父类的如下几个方法
对于加载分区下所有最新文件而言, loadInvolvedFiles
核心代码如下
首先会获取所有的分区路径,然后调用父类方法获取分区下最新数据文件。
对于查找记录对应的文件而言, explodeRecordRDDWithFileComparisons
核心代码如下
可以看到和 HoodieBloomIndex#explodeRecordRDDWithFileComparisons
处理逻辑类似,在使用索引过滤器获取所有匹配的文件和分区路径时,此时比较的是所有分区下的文件,不再是指定的分区路径。
对于将位置信息推回至原始记录而言, tagLocationBacktoRecords
核心代码如下
其处理逻辑与父类处理逻辑相同,也是使用一次左外连接将位置信息推回至原始记录。
3. 总结
对于 HoodieGlobalBloomIndex
而言,其是全局的索引,即会在所有分区内查找指定的recordKey,而非像 HoodieBloomIndex
只在指定的分区内查找,同时在加载分区下所有最新文件时,其会首先获取所有分区,然后再获取所有分区下的最新文件,而非使用从原始记录中解析出来的分区路径。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- MySQL——索引实现原理
- HBase 二级索引实现方案
- 基于 B + Tree 的索引实现
- Lucene倒排索引实现原理探秘(2)
- Sphinx&coreseek实现中文分词索引
- 使用 Docker 和 Nginx 实现简单目录索引服务
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。