HBASE 结构过滤器

本文介绍了HBase的过滤器使用,重点讲解了FilterList和SingleColumnValueFilter。FilterList允许设置多个过滤器,满足特定逻辑(如必须全部通过或只需一个通过)。SingleColumnValueFilter用于基于列值的过滤,支持多种比较操作。此外,还提到了其他类型的过滤器,如基于列族、列限定符、前缀、范围和行键的过滤,以及PageFilter和SkipFilter等。

1.结构过滤器–FilterList
FilterList代表一个过滤器链,他可以包含一组即将应用于目标数据集的过滤器,过滤器具有与“FilterList.Operator.MuST_PASS_ALL”和或“FilterList.Operator.MUST_PASS_ONE”关系
FilterList list=new FilterList(FilterList.Operator.MUST_PASS_ONE);//数据只要瞒足一组过滤器中的一个就可以
SingleColumnValueFileter filter1=new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes(“my value”)
);
list.add(filter1);
SingleColumnValueFilter filter2=new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes(“my other value”)
);
list.add(filter2);
Scan scan=new Scan();
scan.setFilter(list);
(2)比较器 ByteArrayComparable
1.BinaryComparator 匹配完整字节数组
2.BinaryPrefixComparator 匹配字节数组前缀
3.BitComparator
4.NullComparator
5.RegexStringConparator 正则表达式匹配
6.SubstringComparator 子串匹配
2–列值过滤器–SingleColumnValueFilter
SingleColumnValueFilter.用于测试列值相等(CompareOp.EQUAL),不等(CompareOp.NOT_EQUAL),或单侧范围(e.g,CompareOp.GREATER).
1.比较的关键字是一个字符数组
SingleColumnValueFilter(byte[] family,byte[] qualifier,CompareFilter.CompareOp compareOp,byte []value)
2.比较的关键字是一个比较器(比较器下一节做介绍)
SingleColumnValueFilter(byte[] family)
3.键值元数据
由于HBase采用键值对保存内部数据,键值元数据过滤器评估一行的键(ColumnFamily: Qualifiers)是否存在,对应
基于多个列名(即Qualifier)前缀过滤数据的MultipleColumnPrefixFilter
MultipleColumnPrefixFilter 和 ColumnPrefixFilter 行为差不多,但可以指定多个前缀。
6.SkipFilter
根据整行的每个列来做过滤,只要存在一列不满足条件,整行都被过滤掉。
在这个情况下,我们结合ValueFilter和skipFilterr共同使用达到目的:
Utility–FirstKeyOnlyFilter
该过滤器仅仅返回每一行的第一个cell的值,可以用于高效的执行行数统计操作。
构造函数:
public FirstKeyOnlyFilter()
5.PageFilter
Connection对象
创建好配置Configuration对象后,创建Connection连接对象,建立和HBase数据库的连接(过程其实和关系型数据连接配置过程相似)
Connection connection=ConnectionFactory.createConnection(config);
Admin对象
最后创建Admin对象即客户端管理对象,其后的HBase数据库操作基本全是由Admin发出。
注意:connection和admin均占用系统资源,在使用完以后一定注意使用close方法关闭资源,以免造成资源短缺。
二.判断表名是否存在
使用HBase API中的tableExists()方法查看获取boolean值完成表是否存在的判断。
三、若不存在HTableDescriptor对象和HColumnDescriptor对象,新建HColumnDescriptor对象加入cf列族(可使用for循环加入多个列族),将HColumnDescriptor对象通过addFamily方法假如到HTableDescriptor对象中,最后使用Hbase Api中的create table方法完成表的创建。
四。删除表、
首先判断表是否不存在,若不存在则直接返回,若存在则调用HBase API中的disable Table方法和delete Table 方法完成表的删除。主要一定要先disable掉表再deleteTable,否则会直接报错。
五、增加/更新表数据
注意更新数据在HBase中是增加一条数据,只是这条数据的版本更高一点。同时在HBase中数据都是以byte[]字节数组的形式存储的,因此需要通过Bytes.toBytes方法进行数据类型转换。
七.全表扫描scan
创建table对象,创建scan对象,以scan对象为参数通过table对象的getScanner方法获取全表扫描集合ResultScanner对象(一个集合),通过for循环获取scanner对象的cell数组(行键:列族:列:版本号)和row(byte[]字节数组类型)(对Results集合遍历后或得的Result数组同样可拆分的rowkey和cell数组,本身也是一个集合)。
过滤器:
1.结构过滤器–FilterList
2.列值过滤器–SingleColumnValueFlter
2.1.第一种构造函数情况–比较的关键字是字符数组
2.2.第二种构造函数情况–比较的关键字是比较器ByteArrayComparable
3.键值元数据
3.1.基于列族过滤器数据的FamilyFilter
3.2.基于限定符Qualifiter(列)过滤器QuaalifierFilter
3.3.基于列名(即Qualifier)前缀过滤数据的ColumnPrefixFilter
3.4.基于多个列名(即Qualifier)前缀过滤数据的MultIPleColumnPrefixFilter
3.5.基于列范围(不是行范围)过滤数据ColumnRangeFilter
4.RowKey
5.PageFilter
6.SkipFilter
7.Utility–FirstKeyOnlyFilter
参数基础
(1).比较运算符 CompareFilter.CompareOp
(2).比较器 ByteArrayComparable
1.BinaryConmparator 匹配完整字节数组
2.BinaryPrefixComparator 匹配字节数组前缀
3.BitComparator
4.NullComparator
5.RegexStringComparator 正则表达式匹配
6.SubstringComparator 子串匹配

### HBase 中布隆过滤器的使用方法与原理 #### 1. 布隆过滤器简介 布隆过滤器是一种高效的空间节省型概率数据结构,主要用于测试一个元素是否属于某集合。它的核心特点是能够在极低的时间复杂度下完成成员关系检测操作,同时占用较少的存储资源[^1]。 #### 2. 布隆过滤器的工作原理 布隆过滤器通过多个哈希函数将待加入集合中的元素映射到固定长度的位数组中。当需要查询某个元素是否存在时,同样利用这些哈希函数计算对应的位位置并检查它们的状态。如果所有对应的位置都被置为1,则认为该元素可能存在于集合中;如果有任意一位未被设置为1,则可以断定该元素一定不存在于集合中[^1]。 ##### 2.1 失误率调节 由于布隆过滤器基于概率工作,因此存在一定的假阳性率(即错误地判定某些不属于集合的元素为“可能存在”)。这种失误的概率可以通过调整以下几个参数来控制: - **位数组大小**:更大的位数组能降低失误率。 - **哈希函数数量**:更多的独立哈希函数有助于提高准确性,但也增加了计算成本。 - **插入元素的数量**:随着更多元素被添加至布隆过滤器,其失误率会逐渐上升。 #### 3. HBase 中布隆过滤器的作用 HBase 是一种分布式列族数据库,在处理大规模数据集时面临诸多挑战之一便是快速定位目标记录所在的具体物理位置。传统方式依赖块索引来实现这一功能,然而这种方法可能导致大量无意义的数据块加载,进而影响整体性能[^3]。 引入布隆过滤器后,可以在不显著增加额外开销的前提下有效缓解上述问题。具体来说,每当创建一个新的 StoreFile (也称为 HFile),都会为其附加一块元数据区域——MetaBlock 来保存当前文件所关联的所有键值对经过特定算法压缩后的摘要信息。这样做的目的是为了使得后续执行 Get 请求时能够迅速排除那些不可能包含所需条目的候选对象,从而大幅削减实际访问次数以及相应消耗的 I/O 资源[^2]。 以下是几个重要方面: ##### 3.1 存储位置 如前所述,布隆过滤器本身作为 MetaBlock 的一部分嵌入到了每一个单独生成出来的 HFiles 当中去,并且同其他常规 DataBlocks 共享统一缓存管理策略 LRUCache[]^2]^. ##### 3.2 开启配置 要在 HBase 表定义阶段启用此特性非常简便只需指定相应的选项即可如下所示: ```xml <columnFamily name="cf1" bloomType="ROW|ROWCOL"/> ``` 这里提供了两种模式可供选择分别是 ROW 和 ROWCOL 它们分别代表只针对行健或者连同行内限定字段共同参与构建过程最终形成更精确但同时也更加耗费代价的结果形式[^4]. ##### 3.3 数据获取流程变化 一旦激活了这项技术之后每次发起 GET 查询请求之前系统便会先调用本地已有的副本尝试匹配成功则继续向下推进否则直接跳过整个环节避免浪费时间精力去做徒劳功耗动作[^3]. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值