面试题答案
一键面试数据结构
- 布隆过滤器(Bloom Filter):本质上是一个位数组,通过多个哈希函数将元素映射到位数组的不同位置,置为1来表示元素可能存在(存在误判)。在HFile中,用于快速判断某个键是否可能存在于某个块中,减少不必要的磁盘I/O。
- Block:HFile以块(Block)为单位存储数据,每个块包含数据以及相关的元数据,布隆过滤器相关Block会存储布隆过滤器的数据。
大致流程
- 写入数据时:
- 当新数据写入HBase并要更新到HFile时,数据首先在内存中进行处理。对于要写入的每个键值对,相关的键会通过布隆过滤器的哈希函数计算出在布隆过滤器位数组中的位置。
- 如果该位置尚未置1,则将其置1。在实际实现中,可能会批量处理数据,然后一次性更新布隆过滤器。
- Block更新:
- 当一个Block的数据达到一定阈值(如Block大小限制)或满足其他条件(如内存中数据批量处理完成)时,该Block会被写入磁盘,此时会更新布隆过滤器相关Block。
- 布隆过滤器相关Block会包含更新后的布隆过滤器数据,用于后续对该Block内数据的快速查询判断。在读取数据时,先查询布隆过滤器相关Block,如果判断键可能存在于该Block中,再进行实际的Block数据读取和键值对匹配,否则可直接跳过该Block,从而提高查询效率。