Hbase FilterList使用总结

本文介绍了Hbase中用于组合多个Filter的FilterList,包括两种类型:MUST_PASS_ONE(或关系)和MUST_PASS_ALL(与关系)。通过实例解释了如何使用PrefixFilter、RowFilter和QualifierFilter,并说明了当数据行必须通过所有过滤器时,匹配过程会如何停止。

作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7098138.html 转载请注明出处

我们知道Hbase的Scan经常需要用到filter来过滤表中的数据返回给客户端,单个的filter还好说,如果有多个呢,那么就需要使用FilterList,它也是继承于抽象类Filter,
里面持久化了一个有序的order list来存储不同的filter对数据进行过滤.

FilterList分为二种类型,如下
FilterList allFilters = new FilterList(FilterList.Operator.MUST_PASS_ONE);
或者
FilterList allFilters = new FilterList(FilterList.Operator.MUST_PASS_ALL);

查看源代码,可以仔细看下如下注释

  • {@link Operator#MUST_PASS_ALL} evaluates lazily: evaluation stops as soon as one filter does
  • not include the KeyValue.
  • {@link Operator#MUST_PASS_ONE} evaluates non-lazily: all filters are always evaluated.

二种区别根据上述注释理解,其实就相当于and和or的关系.MUST_PASS_ONE只要scan的数据行符合其中一个filter就可以返回结果(但是必须扫描所有的filter),
另外一种MUST_PASS_ALL必须所有的filter匹配通过才能返回数据行(但是只要有一个filter匹配没通过就算失败,后续的filter停止匹配)。这里可能说起来有点绕。
那么来一段代码体会

FilterList allFilters = new FilterList(FilterList.Operator.MUST_PASS_ALL);
allFilters.addFilter(new PrefixFilter(Bytes.toBytes("abc")));
allFilters.addFilter(new RowFilter(CompareFilter.CompareOp.EQUAL,
            new RegexStringComparator(".*_(xyz|xxx)$"));
allFilters.addFilter(new QualifierFilter(CompareFilter.CompareOp.EQUAL,
            new SubstringComparator("china")));
scan.setFilter(allFilters);

第一个PrefixFilter是对rowkey的前缀进行过滤,第2个RowFilter是对rowKey进行正则匹配,rowkey的结尾必须满足特定的字符串,第三个QualifierFilter是对列限定符
进行匹配,列限定符必须equal字符串"china"才可以.那么FilterList在这里的类型由于是MUST_PASS_ALL,因此扫描的数据行必须匹配通过这3个filter才可以返回结果.而
实际在扫描匹配的时候,由于filter是有序的,那么在匹配第一个filter的时候,如果已经不符合了,后面的几个filter匹配就会停止,不会再进行了.

<think>好的,我现在需要帮助用户了解HBase在用户画像中的应用。根据用户提供的引用和之前的回答,我需要综合这些信息来整理出一个清晰的回答。首先,用户提到的引用1、2、3、4、5都涉及HBase在用户画像中的不同方面,比如存储、查询、架构、标签管理等。 首先,我应该确定用户画像的基本概念,以及为什么HBase适合这个场景。根据引用2,HBase是列式存储、可扩展、支持实时读写,这对于需要快速查询和更新用户标签的系统非常重要。另外,引用3提到了HBase的主从架构,这对于高可用性很重要,尤其是在处理大规模数据时。 接下来,用户可能想知道具体的应用方式和优势。比如,引用1提到商品属性和用户画像存储在HBase中,提高运营效率。需要详细说明HBase如何存储这些数据,比如列族的设计,RowKey的设置等。同时,引用4提到了Lemon Bitmap与HBase的结合,用于实时多维度过滤,这可能是一个优化点,可以展开说明。 用户还可能关心实际案例,引用5中的例子说明标签过期策略的应用,可以作为一个使用案例来说明HBase如何管理动态变化的标签。另外,引用4中的Druid对比可能帮助用户理解HBase在OLTP场景中的优势,尤其是数据频繁更新和强一致性方面。 在实现方式部分,需要涵盖数据模型设计、RowKey优化、标签更新机制、查询优化等。例如,RowKey设计可能包括用户ID和标签类型组合,确保高效查询。同时,利用HBase的版本控制来处理标签的时效性,如引用5中的疫情标签例子。 优势方面,需要突出实时读写、扩展性、灵活schema、高效压缩等。引用2和3中的内容可以支持这些点。同时,结合之前的回答中提到的HBase在实时场景中的优势,比如高吞吐写入和随机读,可以进一步强调这些在用户画像中的具体应用。 最后,用户可能需要了解实际应用案例,比如电商平台、社交网络或广告推荐系统,这些都是HBase常见的应用场景。结合引用1和4提到的电商和推荐系统,可以具体说明HBase在这些领域中的角色。 总结来说,我需要将用户提供的引用内容整合到各个部分,确保每个优势和应用方式都有对应的引用支持,同时结构清晰,让用户能够一步步理解HBase在用户画像中的应用。另外,要注意使用中文,符合之前的格式要求,比如行内数学公式用$...$,独立公式用$$...$$,并添加引用标识。</think>### HBase 在用户画像场景中的应用与优势 #### 一、用户画像的核心需求 用户画像需要存储海量用户的 **动态标签数据**(如性别、兴趣、行为记录),并支持以下操作: 1. **实时更新**:用户行为触发标签动态变化(如最近购买偏好)。 2. **多维度查询**:根据标签组合快速筛选目标用户(如“年龄 25-30 岁且最近浏览过电子产品”)。 3. **高效存储**:支持 TB/PB 级数据存储,且成本可控。 HBase 凭借 **列式存储、高扩展性、低延迟读写** 的特性,成为用户画像场景的理想选择[^2][^4]。 --- #### 二、HBase 在用户画像中的实现方式 1. **数据模型设计** - **RowKey 设计**: 以 **用户ID + 标签类型** 组合构建 RowKey,例如: $$ \text{RowKey} = \text{UserID}\_\text{TagType} $$ 例如:`User123_Interest`,便于按用户或标签类型快速检索[^3]。 - **列族与列限定符**: - 列族(Column Family):按标签维度划分(如 `BasicInfo`、`Behavior`)。 - 列限定符(Column Qualifier):存储具体标签(如 `Gender:Male`、`LastPurchase:2023-10`)。 ```plaintext RowKey: User123_Behavior Column Family: Behavior -> Column Qualifier: Click_ProductA → Value: 2023-10-05 -> Column Qualifier: Purchase_ProductB → Value: 2023-10-08 ``` 2. **标签动态更新** - 通过 HBase 的 **Put/Delete 操作** 实时更新标签(如用户完成购买后更新 `LastPurchase` 时间戳)[^2][^5]。 - 支持 **版本控制(Versioning)**,保留历史标签记录(如用户兴趣变迁分析)[^4]。 3. **高效查询优化** - **RowKey 前缀扫描**: 通过 `scan` 操作按用户ID前缀快速获取所有关联标签(如 `User123_*`)[^3]。 - **Lemon Bitmap 集成**: 结合华为云 **Lemon Bitmap** 插件,实现多标签组合的快速过滤(如“性别=女 AND 活跃度>80”)[^4]。 $$ \text{查询效率} = O(1) \text{(Bitmap 位运算)} $$ --- #### 三、HBase 的核心优势 | **优势** | **说明** | **用户画像场景示例** | |--------------------|-------------------------------------------------------------------------|---------------------------------------------| | **实时读写能力** | 支持毫秒级响应,适合动态标签更新(如实时记录用户点击行为)[^2][^5]。 | 用户浏览商品后,立即更新“最近兴趣”标签。 | | **灵活 Schema** | 列族可动态扩展,无需预定义所有标签字段(如新增“双11促销敏感度”标签)[^3][^4]。 | 电商活动期间临时添加促销相关标签。 | | **高扩展性** | 通过 Region 分片实现水平扩展,轻松应对亿级用户数据[^3][^5]。 | 社交平台用户数从百万增长至十亿仍保持稳定。 | | **高效压缩** | 列族级压缩(如 Snappy、GZIP)降低存储成本[^2]。 | 存储千亿级用户行为记录,压缩比可达 5:1。 | --- #### 四、实际应用案例 1. **电商用户画像** - **场景**:存储用户购物偏好、浏览历史、促销敏感度等标签。 - **实现**: - 使用 HBase 记录用户实时行为(如加入购物车、下单)。 - 通过 `FilterList` 组合查询高价值用户(如“近 30 天消费 >1000 元且偏好电子产品”)[^1][^2]。 2. **广告推荐系统** - **场景**:根据用户标签实时匹配广告(如地域、年龄、兴趣)。 - **实现**: - 利用 HBase 的 **协处理器(Coprocessor)** 在服务端完成标签过滤,减少网络传输。 - 结合 Flink 实时计算用户标签权重,更新至 HBase[^5]。 3. **社交网络用户分析** - **场景**:分析用户社交关系、内容互动频率。 - **实现**: - 存储用户关注列表、点赞记录至 HBase,支持快速查询“共同好友”或“高频互动用户”[^3]。 --- #### 五、与其他技术的对比 | **技术** | **适用场景** | **HBase 优势** | |----------------|---------------------------|--------------------------------------------| | **关系型数据库** | 结构化数据、强事务需求 | HBase 支持海量数据扩展和灵活 Schema[^2][^5]。 | | **Elasticsearch** | 全文检索、复杂聚合 | HBase 在实时更新和点查性能上更优[^4]。 | | **ClickHouse** | 离线分析、复杂聚合查询 | HBase 适合实时读写场景[^1][^2]。 | --- ### 相关问题 1. 如何设计 HBase 的 RowKey 以优化用户画像查询性能? 2. HBase 如何与 Flink 结合实现用户标签的实时计算? 3. 在用户画像场景中,HBase 的版本控制机制有哪些具体应用? --- [^1]: HBase 的列式存储特性适合存储动态扩展的用户标签数据。 : HBase 的实时读写能力可满足用户画像的高频更新需求。 [^3]: HBase 的主从架构设计保障了高可用性和扩展性。 [^4]: Lemon Bitmap 插件增强了 HBase 的多维度标签过滤能力。 [^5]: HBase 的标签过期策略可有效管理无效数据,降低存储成本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值