Phoenix on HBase+Solr = 易用一体化大数据在线宽表引擎

简介: 在大数据场景中,HBase由于其高吞吐,高并发,实时可见等特性往往被作为在线主存储,云HBase团队融合了在线存储引擎和全文引擎的优势,解决了针对在线大数据存储的复杂查询难题,并提供SQL统一表达,降低用户使用门槛。通过一站式产品能力,用户可以更加灵活高效地解决业务问题。

一、背景概述

HBase作为海量在线存储引擎,被广泛应用于推荐、风控、物联网、画像、表单等大数据场景。Phoenix作为HBase的SQL层,极大降低了用户使用门槛,并且实现了二级索引、加盐表、动态列等大量实用功能。HBase底层存储基于LSM,LSM能将业务的随机写转为顺序写,能有效提升写吞吐,但是其查询只适合于Rowkey的前缀匹配,查询模式单一;Phoenix二级索引,底层是跟原表关联的索引表,同样也是前缀匹配,一个表可以有多个索引,这样可以增加查询范式,但是索引数目不能太多,否则写放大的问题会比较严重。对于更加复杂的查询场景,比如表单、日志查询里面的模糊查找,用户画像里面的随机条件组合等等,HBase + Phoenix的组合就不能支持。该问题是基于LSM的NoSQL数据库的通用问题,除了HBase,Cassandra、LevelDB、RocksDB、MongoDB的Wired Tiger引擎等都有相同的问题。

image

当前用户常见的解决方法就是给主存储引擎搭配检索引擎,比如Lucene、ElasticSearch、Solr。该方案实际使用过程中十分复杂:

  1. 用户学习成本double,门槛提高;
  2. 用户要解决数据同步,数据同步又分批量离线同步和增量实时同步,用户要选择不同的解决方案,比如用mr作业批量同步,分析wal日志或者双写的方式实时同步;
  3. 同步过程中有数据一致性问题,比如写入检索引擎跟写入存储引擎的数据顺序不一致,这个很难在应用层完全保证;
  4. 数据延迟问题,两个引擎的写入吞吐不一致,往往存储引擎要比检索引擎快很多,容易导致数据堆积,甚至带来稳定性问题。

阿里云HBase团队设计并实现了Search Index功能,一站式解决这些问题,并且支持SQL,用户通过DDL、DQL就可以进行复杂索引操作。

二、方案实现

image

SearchIndex架构如图所示,Phoenix会同时支持全文引擎(Solr)和KV引擎(HBase),并且提供管理和查询索引相关的SQL表达。我们目前基于Solr自研了SearchService服务,涵盖了所有索引管理,数据同步,元数据管理等方面的功能。下面结合图中的Create语句和Select语句对架构设计进行比较深入的说明。

create语句在执行的时候,可分为以下步骤:

  1. phoenix会解析SQL语句,确定Solr中Collection的存储格式,并生成从Phoenix表到Solr Collection的映射关系;
  2. 在IndexCloud(Solr)中创建Collection;
  3. 开启从Phoenix表到Solr Collection的实时数据同步;
  4. 启动分布式作业将存量数据同步到Solr中;

映射的时候,Phoenix默认只在Solr中存储索引,原始数据不需要存储,这样可以节省存储开销。创建成功后,用户可以直接使用Phoenix Upsert语句往Phoenix里面插入数据,后台会将做自动实时同步。为了解决Solr中数据延迟的问题,我们还实现了反压机制,数据可见时间可配置,比如10s,那么Solr中数据比HBase中数据可见最大间隔会由系统保证在10s左右。

Select语句在执行的时候,可分为以下步骤:

  1. Phoenix解析SQL语句,识别哪些请求需要下发到Solr,哪些需要去HBase中执行;
  2. 将1中识别到的请求发给Solr,拿到返回的RowKey列表;
  3. 根据2中拿到的RowKey列表,回查HBase,拿到最终的返回结果。

除了Create、Select,其他DDL和DQL语法请参考文档:SearchIndex用户文档

三、用法示例

SearchIndex可以很好地满足表单、用户画像、日志等场景的复杂查询需求,本章以表单查询为例说明SearchIndex的用法,在表单查询场景中,大部分查询可以通过前缀匹配的方式解决,但是会对表单详情数据进行模糊查找。

--创建表

create table items(col1 integer primary key, name varchar, content varchar, addr varchar);

--插入数据

upsert into items values(1, 'zhangsan', 'hello world!', 'hangzhou')

--创建索引,存量数据默认会同步导入

create search index on items(content{analyzer=standard})

--插入数据,会通过异步方式实时增量导入

upsert into items values(2, 'lisi', 'Xihu is a beautiful place.', 'hangzhou')

--查询表单

select name, addr from items where search_query='CONTENT:hello';

--删除索引

drop search index on items;

四、总结与展望

本文介绍了SearchIndex解决的用户问题,SearchIndex当前的实现逻辑,以及SearchIndex解决表单查询场景的简单示例。用户可以同时享受到KV引擎带来的高并发、高吞吐的读写能力,和全文引擎带来的在线复杂查询能力,并且提供SQL的统一表达,极大提升了产品易用性。通过SearchIndex的一站式产品能力,用户可以更加灵活高效地解决业务问题。

后续我们团队会对SearchIndex持续优化升级。比如,1. 目前用户还需要自己识别那些字段在Search Index中,然后编写Search Query,后续我们会支持native SQL,用户只需要按照普通的SQL语法写Query语句就可以了;2. 第一版本中还只支持条件组合,全文等查询语法,对于分组聚合、排序的加速还不支持,在后续版本中也会增强该功能;3. 数据同步和查询性能也会持续优化。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
3月前
|
存储 数据采集 大数据
大数据处理与分析技术:驱动智能决策的引擎
本文介绍了大数据处理与分析技术在现代社会中的重要性和应用。从数据采集、存储、处理到分析决策,大数据技术为我们提供了深入洞察和智能决策的能力,推动着各行各业的创新和发展。
50 0
|
5月前
|
存储 分布式计算 Hadoop
【大数据】Hadoop技术解析:大数据处理的核心引擎
【大数据】Hadoop技术解析:大数据处理的核心引擎
147 0
|
7月前
|
SQL 分布式计算 数据库连接
大数据Spark分布式SQL引擎
大数据Spark分布式SQL引擎
217 0
|
7月前
|
大数据 分布式数据库 Docker
基于Docker搭建大数据集群(七)Hbase部署
基于Docker搭建大数据集群(七)Hbase部署
|
7月前
|
存储 NoSQL 分布式数据库
Hbase+ES和MongoDB存储大数据的选用
Hbase+ES和MongoDB存储大数据的选用
229 0
|
5月前
|
人工智能 大数据 调度
【云栖2023】林伟:大数据AI一体化的解读
本文根据2023云栖大会阿里云研究员,阿里云计算平台事业部首席架构师,阿里云人工智能平台PAI和大数据开发治理平台DataWorks负责人---林伟演讲实录整理而成,演讲主题:”大数据AI一体化的解读“。
|
6月前
|
机器学习/深度学习 人工智能 监控
阿里云的大数据计算引擎应用场景
阿里云的大数据计算引擎应用场景
|
2月前
|
SQL 并行计算 大数据
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
关于Flink服务的搭建与部署,由于其涉及诸多实战操作而理论部分相对较少,小编打算采用一个独立的版本和环境来进行详尽的实战讲解。考虑到文字描述可能无法充分展现操作的细节和流程,我们决定以视频的形式进行分析和介绍。因此,在本文中,我们将暂时不涉及具体的搭建和部署步骤。
494 3
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
|
4月前
|
数据采集 搜索推荐 Java
【大数据实训】用Hbase模拟电影搜索引擎(四)
【大数据实训】用Hbase模拟电影搜索引擎(四)
53 1
|
4月前
|
大数据 数据管理 分布式数据库
探索 HBase GUI 工具,助您轻松驾驭大数据世界!
从此告别繁琐,迎接大数据时代的新利器! #HBase #GUI #数据管理 #工具分享
91 2
探索 HBase GUI 工具,助您轻松驾驭大数据世界!

热门文章

最新文章