3.2 布隆过滤
模式描述
布隆过滤跟之前的模式类似的功能,只是它使用了一个独特的评估函数来作用域每一条记录。
目的
过滤器使我们可以保留属于某个预定义值集合的记录。如果输出的结果有小的误判也不会是问题,因为我们会在后续的操作做进一步的检查。这里的预先确定值列表称为热门值(hot values)集合。
对每一条记录,抽取其中一个特征。如果抽取的特征是布隆过滤中所表示的值集合的成员,则保留这条记录;否则丢弃这条记录。
动机
过滤记录的依据是基于记录是否属于某个集合而不是基于某些热门值。要使用布隆过滤器来评估集合成员的资格。使用布隆过滤器来表示受监视词列表,有时会出现布隆过滤器判断为这个词属于集合,但其并不存在于这个集合的情况。
适用场景
- 在过滤的过程中,数据可以被分成多条记录。
- 每条记录可以抽取出一个特征,这个特征可以被一系列的热门值表示。
- 对于热门值有预先确定的元素集合。
- 能接受结果误判的存在。
结构
首先需要将布隆过滤器解释成一个值的列表。结果数据对象存储在HDFS上。然后,使用MapReduce作业来过滤,这个结构与本章之前讲的过滤模式类似,只是在处理的过程中使用了分布式高速缓存。
这个作业的第一步是使用一个值的列表训练布隆过滤器。这个过程是通过加载存储的数据,并将每条记录加入到布隆过滤器中实现的。训练得到的布隆过滤器存储在HDFS的指定路径。
这个模式的第二步是做实际的过滤操作。当map任务启动时,从分布式高速缓存中加载布隆过滤器。然后,在每个mao函数中,遍历每一个记录并检查记录是否存在布隆过滤器中存在。通过判断是否属于布隆过滤器的成员来确定每条记录转发与否。
只有当数据变化时,才需要重新训练布隆过滤器。
结果
这个作业的输出将是一个通过布隆过滤器成员资格检测的记录子集。由于布隆过滤器存在误判的可能,因此你应该预判到某些通过了集合成员资格测试的记录并不在热门值中。