Phoenix on HBase+Solr = 易用一体化大数据在线宽表引擎
一、背景概述
HBase作为海量在线存储引擎,被广泛应用于推荐、风控、物联网、画像、表单等大数据场景。Phoenix作为HBase的SQL层,极大降低了用户使用门槛,并且实现了二级索引、加盐表、动态列等大量实用功能。HBase底层存储基于LSM,LSM能将业务的随机写转为顺序写,能有效提升写吞吐,但是其查询只适合于Rowkey的前缀匹配,查询模式单一;Phoenix二级索引,底层是跟原表关联的索引表,同样也是前缀匹配,一个表可以有多个索引,这样可以增加查询范式,但是索引数目不能太多,否则写放大的问题会比较严重。对于更加复杂的查询场景,比如表单、日志查询里面的模糊查找,用户画像里面的随机条件组合等等,HBase + Phoenix的组合就不能支持。该问题是基于LSM的NoSQL数据库的通用问题,除了HBase,Cassandra、LevelDB、RocksDB、MongoDB的Wired Tiger引擎等都有相同的问题。
当前用户常见的解决方法就是给主存储引擎搭配检索引擎,比如Lucene、ElasticSearch、Solr。该方案实际使用过程中十分复杂:
- 用户学习成本double,门槛提高;
- 用户要解决数据同步,数据同步又分批量离线同步和增量实时同步,用户要选择不同的解决方案,比如用mr作业批量同步,分析wal日志或者双写的方式实时同步;
- 同步过程中有数据一致性问题,比如写入检索引擎跟写入存储引擎的数据顺序不一致,这个很难在应用层完全保证;
- 数据延迟问题,两个引擎的写入吞吐不一致,往往存储引擎要比检索引擎快很多,容易导致数据堆积,甚至带来稳定性问题。
阿里云HBase团队设计并实现了Search Index功能,一站式解决这些问题,并且支持SQL,用户通过DDL、DQL就可以进行复杂索引操作。
二、方案实现
SearchIndex架构如图所示,Phoenix会同时支持全文引擎(Solr)和KV引擎(HBase),并且提供管理和查询索引相关的SQL表达。我们目前基于Solr自研了SearchService服务,涵盖了所有索引管理,数据同步,元数据管理等方面的功能。下面结合图中的Create语句和Select语句对架构设计进行比较深入的说明。
create语句在执行的时候,可分为以下步骤:
- phoenix会解析SQL语句,确定Solr中Collection的存储格式,并生成从Phoenix表到Solr Collection的映射关系;
- 在IndexCloud(Solr)中创建Collection;
- 开启从Phoenix表到Solr Collection的实时数据同步;
- 启动分布式作业将存量数据同步到Solr中;
映射的时候,Phoenix默认只在Solr中存储索引,原始数据不需要存储,这样可以节省存储开销。创建成功后,用户可以直接使用Phoenix Upsert语句往Phoenix里面插入数据,后台会将做自动实时同步。为了解决Solr中数据延迟的问题,我们还实现了反压机制,数据可见时间可配置,比如10s,那么Solr中数据比HBase中数据可见最大间隔会由系统保证在10s左右。
Select语句在执行的时候,可分为以下步骤:
- Phoenix解析SQL语句,识别哪些请求需要下发到Solr,哪些需要去HBase中执行;
- 将1中识别到的请求发给Solr,拿到返回的RowKey列表;
- 根据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. 数据同步和查询性能也会持续优化。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
X-Pack Spark用户手册
概述 X-Pack Spark是大数据平台的通用计算平台,应用非常广泛。本文主要介绍Spark相关的知识,主要包括:了解Spark,使用Spark,使用Spark过程中遇到的问题FAQ等,谨帮助用户快速的掌握Spark以及如何使用Spark。X-Pack Spar兼容开源Spark,本文介绍的内素材以X-Pack Spark为背景。 大纲 基础篇 Spark的入门介绍 如何使用X-Pack Spark的YarnUI、SparkUI、Spark日志、任务运行状况的分析. Spark 通用的性能配置方法:内存(executor-memory)和CPU(executor-cores)的配置。 Spark本地连接hbase集群做调试. Spark SQL语法介绍 Spark Streaming介绍 Structured Streaming介绍 Spark DataSource外部数据源介绍 进阶篇(高级功能) X-Pack Spark使用[FAQ] FAQ明细请参考:X-Pack Spark使用FAQ X-Pack Spark之性能优化 Spark Streaming 常见优化。 案例实战 广...
- 下一篇
阿里云大数据产品Dataworks2.0问题排查思路
1.数据同步不支持数据包含换行符n2.PAI节点可以支持TenSorFlow。3.遇到连通性通过,但是配置同步作业或运行时会有超时情况。这种情况通常自定义资源组来做同步。4.正常调用正常但重跑报错报错ODPS-0130071,重新打开窗口重跑流程。5.与其他关联产品比如ODPS、PAI是和项目空间确认绑定关系的。必须创建dataworks时来配置。6.赋值节点中是不支持使用python代码执行SQL的7.提交任务成功后10分钟之前生成的实例都是空跑设置为成功的。之后生成的实例应该是可以正常运行的,如果还是无法正常运行,可以重新发布一下任务。8.不支持节点任务完成数据的保存之后,通知本地系统做出响应。9.要使用dataworks的Stream Studio必须开通实时计算10.sqlscript:一次编译,odpssql:是逐条编译11.目前没有组合节点的概念(dataworks1.0的),想要依赖多个节点组成的模块,直接依赖其最后一个节点就可以。12.pyodps 节点不要通过迭代的方式来处理数据,再上传,这个是单机,没有利用到 MaxCompute 的能力,应当用 PyODPS Da...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装