CN107122443B - 一种基于Spark SQL的分布式全文检索系统及方法 - Google Patents
一种基于Spark SQL的分布式全文检索系统及方法 Download PDFInfo
- Publication number
- CN107122443B CN107122443B CN201710269870.2A CN201710269870A CN107122443B CN 107122443 B CN107122443 B CN 107122443B CN 201710269870 A CN201710269870 A CN 201710269870A CN 107122443 B CN107122443 B CN 107122443B
- Authority
- CN
- China
- Prior art keywords
- index
- data
- node
- column
- data source
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/3332—Query translation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于Spark SQL的分布式全文检索系统及方法,包括SQL翻译层、数据源管理层、并行计算层、分布式存储层,在SQL翻译层中提出了基于SQL的全文检索文法以及全文检索SQL语句在SQL翻译层各模块间的翻译过程;在数据源管理模块设计了全文检索过程的并行化方法;检索优化模块中,设计了两种索引存储模型和相应的查询时原表数据还原策略,其中基于索引指定列存储模型设计了一种用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法。在两种存储模型下,索引构建时间缩短为传统数据库的0.6%/0.5%,查询时间缩短为传统数据库的1%/10%,索引存储量减少为传统数据库的55.0%。增强了Spark SQL数据分析功能,能够满足传统业务迁移和现有业务对海量数据进行全文检索的需求。
Description
技术领域
本发明涉及海量数据下的数据分析和信息检索技术,更具体地涉及一种基于Spark SQL的分布式全文检索系统及方法。属于软件技术领域。
背景技术
随着云计算、物联网等技术发展以及博客、社交网络,基于位置服务LBS为代表的应用模式的出现(参见文献:孟小峰,慈祥.大数据管理:概念、技术与挑战[J].计算机研究与发展,2013,(01):146-169.),数据的种类和规模正以前所未有的速度增长,大数据中蕴含的宝贵价值成为人们存储和处理大数据的驱动力(参见文献:程学旗,靳小龙,王元卓,郭嘉丰,张铁赢,李国杰.大数据系统和分析技术综述[J].软件学报,2014,(09):1889-1908.),例如,在社交网络方面,Facebook、微博、微信等以人为核心的社交网络产生了大量的文本、图片等数据,对这些数据形成的社交网络进行分析,发现人与人之间隐含的关系、存在的社区;在搜索引擎方面,Google等大型互联网公司通过对广告相关数据的处理用来改善广告的投放效果以提高点击量;在医疗方面,通过对患者病历数据和生活方式的分析,协助医生进行疾病诊断和医治。数百TB甚至数十至数百PB规模的行业或企业大数据以及数据的复杂性已远远超出了现有传统的计算技术和信息系统的处理能力,因此,寻求有效的大数据处理和分析技术已经成为现实世界的迫切需求。
传统的关系型数据库管理技术经过40多年的发展,在扩展性方面遇到了巨大的障碍,无法胜任海量数据的分析任务。以谷歌MapReduce(参见文献:Dean J,GhemawatS.MapReduce:simplified data processing on large clusters[J].Communications ofthe ACM,2008,51(1):107-113.)为代表的非关系型数据的处理和分析技术及其社区开源实现Hadoop(参见文献:Shvachko K,Kuang H,Radia S,et al.The hadoop distributedfile system[C]//Mass storage systems and technologies(MSST),2010IEEE 26thsymposium on.IEEE,2010:1-10.)以其良好的扩展性、并行性、容错性,成为了大数据处理的标准之一,基于Hadoop的数据仓库工具Hive(Thusoo A,Sarma J S,Jain N,et al.Hive:a warehousing solution over a map-reduce framework[J].Proceedings of the VLDBEndowment,2009,2(2):1626-1629.)提供更高层的SQL操作,支持数据的提取、转化和加载(ETL),避免了用户编写MapReduce程序带来的复杂性。由于Hadoop频繁写磁盘、缺乏作业的规划,迭代处理能力差等缺点,UC Berkeley AMPLab提出了类MapReduce通用并行处理框架Spark(参见文献:Zaharia M,Chowdhury M,Das T,et al.Resilient distributeddatasets:A fault-tolerant abstraction for in-memory cluster computing[C]//Proceedings of the 9th USENIX conference on Networked Systems Design andImplementation.USENIX Association,2012:2-2.),有效弥补了Hadoop在迭代计算和交互式方面的不足。其中,Spark SQL(Armbrust M,Xin R S,Lian C,et al.Spark sql:Relational data processing in spark[C]//Proceedings of the 2015ACM SIGMODInternational Conference on Management of Data.ACM,2015:1383-1394.)作为Spark软件栈中的一员,在大数据分析、机器学习、深度学习等方面发挥着工具和桥梁作用。SparkSQL兼容Hive,拥有比Hive更好的性能,目前已支持TPC-DS基准,是大数据背景下优良的数据仓库解决方案之一。
在关系型数据库中,全文检索是衡量数据库易用性和功能完备性的重要指标。全文检索通过将关键词和存储的文档数据进行匹配,找到关联度高的若干文档的信息检索技术。在众多关系型数据库中,如MySQL,SQL Server,都已具备全文检索功能。
然而,Spark SQL作为传统数据仓库的替代系统,不支持全文检索的SQL语句及其并行化。现有分布式全文检索引擎如Solr和ElasticSearch虽然提供了Hive和Spark的连接器,但是仍不支持全文检索SQL文法,无法满足边查询边计算的需求,部署的复杂性和学习成本使其难以使用。
发明内容
本发明技术解决问题:克服现有数据分析工具不支持海量数据下全文检索的问题,提供一种基于Spark SQL的分布式全文检索系统及方法,增强了Spark SQL数据分析功能,能够有效满足传统业务迁移以及现有业务对海量数据进行全文检索的需求。
本发明技术解决方案:本发明相对于传统关系型数据库具有明显的性能提升,索引存储量更小,能够满足在海量数据下的全文检索交互和存储的需求。
在大数据查询分析方面,基于Spark SQL设计实现了面向关系数据的分布式全文检索系统,系统包括SQL翻译层、数据源管理层、并行计算层、分布式存储层四个部分。在SQL翻译层中提出了基于SQL的全文检索的文法以及全文检索SQL语句在SQL翻译层各模块间的翻译过程;在数据源管理模块设计了一种全文检索过程的并行化方法;检索优化模块中,设计了两种索引存储模型和相应的查询时原表数据还原策略,其中基于索引指定列存储模型设计了一种用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法。
SQL翻译层定义了全文检索文法,包括索引建立文法和查询文法,通过接收用户输入的全文检索SQL语句,翻译转换为对索引数据源的接口调用;该层包括文法解析模块、元数据绑定和校验模块、计划树优化模块和物理计划生成模块;文法解析模块首先对输入的SQL语句进行切分,去掉空格形成词序数组;之后根据全文检索文法,提取词序数组中的关键信息,在索引建立过程中,关键信息包括原表名、索引表名,索引列,存储模型,在查询过程中,关键信息包括索引表名、返回结果包含的列名、查询类型、查询条件,这些关键信息分别形成一个语法节点,最终形成一颗语法树;然后对语法树进行遍历,对索引建立语句形成的语法树中原表名节点转换为未关联元数据的数据源节点,索引列节点转换为映射节点,索引表名和存储模型节点转换为索引建立节点,形成逻辑计划树;对查询语句形成的语法树中索引表名节点转换为未关联元数据的数据源节点,返回结果包含的列名节点转换为映射节点,查询类型和查询条件语法树节点转换为查询条件计划树节点,形成逻辑计划树;元数据绑定和校验模块对文法解析模块生成的逻辑计划树中实际类型为表、列、视图的节点与元数据仓库进行关联,校验成功的同时将这些节点替换为关联元数据的数据源节点;计划树优化模块仅对索引查询的计划树进行优化,该计划树优化模块将查询条件计划树节点利用过滤下推技术下推到数据源节点并去掉计划树中的查询条件计划树节点,同时利用列裁剪技术将映射节点包含的映射内容下推到数据源节点并去掉计划树中的映射节点;在索引建立过程中,物理计划生成模块合并数据源节点、映射节点和索引建立节点生成索引建立物理计划节点,在查询过程中,将数据源节点转换为扫描数据源物理计划节点,生成物理计划树;在索引建立过程中,物理计划执行模块将索引建立物理计划节点转化为对索引数据源索引建立接口的调用,调用参数包含了原表名、索引列、存储模型和索引表名,然后索引表的元数据信息中加入原表的名称并存入元数据仓库,在查询过程中,物理计划执行模块将扫描数据源物理计划节点转化为对索引数据源查询接口的调用,调用参数包含了索引表名、查询类型和条件、返回结果包含的列名;
数据源管理层,根据SQL翻译层对索引数据源的接口调用,转换为索引建立或查询的数据处理逻辑,交给并行计算层执行;数据源管理层包括数据源管理模块和检索优化模块;数据源管理模块管理目前Spark支持的所有数据源,根据SQL翻译层的索引数据源调用,实例化索引数据源,索引数据源包含全文检索过程的并行化方法即索引建立过程并行化和查询过程并行化;数据源管理模块将实例化的索引数据源传入检索优化模块对索引数据源中的索引建立和查询过程进行优化,检索优化模块针对索引建立过程设计了两种存储模型,包括全量存储模型和索引指定列存储模型,针对查询过程为与存储模型相对应的原表数据还原策略,原表数据还原策略的输出为得分与相对应的原表数据拼接后的结果,其中,基于索引指定列存储模型为一种用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法,该算法获取原表数据并与得分数据进行拼接;最终,检索优化模块的输出为优化过的索引建立或查询过程的数据处理逻辑,交给并行计算层;
并行计算层,接收数据源管理层的数据处理逻辑,生成作业,并对作业进行规划,分配集群资源,将作业数据处理逻辑分发到每个物理机器上,之后,各物理机器上并行执行作业;
分布式存储层接收并行计算层对于文件读写的接口调用,采用分布式读写的方式进行索引的建立和查询,建立的索引和查询的结果都存储在分布式索引层,并返回执行结果。
1.一种全文检索的SQL文法,包括索引建立文法和查询文法,实现步骤如下:
索引建立文法包括需要建立索引的原表名称,由SQL中的ON关键词指定的需要建立索引的列,存储索引的表名称,设计了STRATEGY、QUICKWAY、NOQUICK关键字,索引建立使用的存储模型由STRATEGY后的QUICKWAY、NOQUICK关键字指定,QUICKWAY为全量存储模型,NOQUICK即索引指定列存储模型;SQL翻译层中的文法解析模块根据索引建立文法提取原表名、索引表名,建立索引的列,存储模型信息,转换为语法树中的节点;
查询文法包括存储索引的表名称,返回结果包含的列名,查询类型,查询条件,查询类型包括词项查询、模糊查询、段查询、前缀查询、表达式查询,分别由设计的新关键字TERMQUERY、FUZZYQUERY、PHRASEQUERY、PREFIXQUERY、QUERYPARSER指定;查询条件包括查询的列、关键词、编辑距离和返回的结果包含的行数,SQL翻译层中的文法解析模块根据查询文法提取索引表名、返回结果包含的列名信息、查询类型、查询条件,转换为语法树中的节点。
2.数据源管理模块中,索引数据源包含的一种全文检索过程的并行化方法即索引建立过程并行化和查询过程并行化,实现步骤如下:
索引建立过程并行化的实现步骤:
(1)将原表数据分片存储在若干个物理节点上,每个节点为一个分区;
(2)对于原表每一个分片所在的节点,启动一个索引建立任务,读取分区数据建立索引;
(3)将该分区产生的索引写入分布式存储层,成为一个索引分片。
查询过程并行化的实现步骤:
(1)在每一个索引分片所在的节点,启动一个索引查询任务,读取索引数据并根据查询类型和条件返回查询结果,每个分片的查询结果为一个分区;
(2)将查询结果写入分布式存储层;
(3)通过全局聚合操作将分布在不同节点上的查询结果根据得分进行聚合,得到全局得分排名前K的行,其中K由查询条件中指定。
3.检索优化模块中,针对索引建立过程定义了两种存储模型包括全量存储模型和索引指定列存储模型,针对查询过程定义了与存储模型相应的原表数据还原策略,实现步骤如下:
全量存储模型和原表数据还原策略的实现步骤:
(1)在索引建立时,从原表按行读入所有列的数据;
(2)针对每一行数据,在建立倒排索引表时,只有SQL的ON关键字指定的索引列才会被分词、建立词典和倒排索引表;
(3)对每一行数据,索引中额外存储所有列的数据;
(4)在查询时,由于索引中存储原表中所有列的数据,因此,原表数据直接从索引中还原;
(5)将得分与还原的原表数据中对应的行进行拼接。
索引指定列存储模型和原表数据还原策略的实现步骤:
(1)在索引建立时,从原表按行读入所有列的数据;
(2)针对每一行数据,在建立倒排索引表时,只有SQL的ON关键字指定的索引列才会被分词、建立词典和倒排索引表;
(3)在查询时,由于索引中未存储原表任何列的数据,因此根据索引表元数据信息中的原表名,从元数据仓库获取原表的分区数据信息;
(4)使用用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法读取原表的分区数据信息并将得分与原表数据中对应的行进行拼接。
4.数据源管理层的检索优化模块中,用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法,实现步骤如下:
(1)利用弹性分布式数据集RDD(RDD,Resilient Distributed Datasets)的分区对齐操作使得原表数据分区与查询结果数据分区对齐;
(2)在查询结果的分区内,记录查询结果需要获取的所有原表数据的偏移量和偏移量对应的得分;
(3)在原表的分区内通过迭代和记录偏移量的方式找到符合的偏移量,将得分与还原的原表数据对应的行进行拼接;
(4)遍历所有映射分区,直到连接操作全部完成。
5.一种基于Spark SQL的分布式全文检索方法,步骤如下:
(1)首先对输入的SQL语句进行切分,去掉空格形成词序数组;之后根据全文检索文法,提取词序数组中的关键信息,在索引建立过程中,关键信息包括原表名、索引表名,索引列,存储模型,在查询过程中,关键信息包括索引表名、返回结果包含的列名、查询类型、查询条件,这些关键信息分别形成一个语法节点,最终形成一颗语法树;然后对语法树进行遍历,对索引建立语句形成的语法树中原表名节点转换为未关联元数据的数据源节点,索引列节点转换为映射节点,索引表名和存储模型节点转换为索引建立节点,形成逻辑计划树;对查询语句形成的语法树中索引表名节点转换为未关联元数据的数据源节点,返回结果包含的列名节点转换为映射节点,查询类型和查询条件语法树节点转换为查询条件计划树节点,形成逻辑计划树;将逻辑计划树中实际类型为表、列、视图的节点与元数据仓库进行关联,校验成功的同时将这些节点替换为关联元数据的数据源节点;对索引查询的计划树进行优化,将查询条件计划树节点利用过滤下推技术下推到数据源节点并去掉计划树中的查询条件计划树节点,同时利用列裁剪技术将映射节点包含的映射内容下推到数据源节点并去掉计划树中的映射节点;在索引建立过程中,合并数据源节点、映射节点和索引建立节点生成索引建立物理计划节点,在查询过程中,将数据源节点转换为扫描数据源物理计划节点,生成物理计划树;在索引建立过程中,将索引建立物理计划节点转化为对索引数据源索引建立接口的调用,调用参数包含了原表名、索引列、存储模型和索引表名,然后索引表的元数据信息中加入原表的名称并存入元数据仓库,在查询过程中,将扫描数据源物理计划节点转化为对索引数据源查询接口的调用,调用参数包含了索引表名、查询类型和条件、返回结果包含的列名;
(2)实例化索引数据源,对索引数据源中的索引建立和查询过程进行优化,在索引建立过程中,根据参数中的存储模型建立索引,在查询过程中,根据索引建立时的存储模型选择相应的原表数据还原策略,将得分与相对应的原表数据拼接,其中,基于索引指定列存储模型使用的是一种用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法;最终,将优化过的索引建立或查询过程的数据处理逻辑,交给并行计算层;
(3)接收数据处理逻辑,生成作业,并对作业进行规划,分配集群资源,将作业数据处理逻辑分发到每个物理机器上,之后,各物理机器上并行执行作业;
(4)采用分布式读写的方式进行索引的建立和查询,建立的索引和查询的结果都存储在分布式索引层,并返回执行结果。
与现有技术相比,本发明的优点是:
(1)支持Spark下SQL形式的全文检索及其并行化。设计和实现了全文检索的SQL文法,在Spark SQL原有强大的数据分析功能基础上,提供对海量数据的分布式全文检索操作,有效满足了基于传统数据库的业务迁移以及现有业务中使用全文检索进行数据查找和分析的需求。
(2)提出了检索模型在分布式环境下的并行方法并基于Spark引擎进行了实现,支持边查询边计算,避免了外部工具带来的复杂性,简化了数据分析的步骤,提供了更有力的工具。
(3)良好的检索优化策略以及强大的可扩展性。针对侧重性能优化或存储优化两种场景分别设计了索引存储规则以及原表数据还原策略。
(4)实验结果表明,对比传统数据库如MySQL,在两种检索优化方案下,该系统索引构建的平均时间缩短为传统数据库的0.6%/0.5%,查询的平均时间缩短为传统数据库的1%/10%,在索引指定列存储模型下,索引存储量减少为传统数据库的55.0%。该系统增强了Spark SQL数据分析功能,能够有效满足传统业务迁移以及现有业务对海量数据进行全文检索的需求。
(5)克服现有数据分析工具不支持海量数据下全文检索的问题,在大数据查询分析方面,基于Spark SQL设计实现了面向关系数据的分布式全文检索系统,系统包括SQL翻译层、数据源管理层、并行计算层、分布式存储层四个部分,在SQL翻译层中提出了基于SQL的全文检索的文法以及全文检索SQL语句在SQL翻译层各模块间的翻译过程;在数据源管理模块设计了一种全文检索过程的并行化方法;检索优化模块中,针对索引建立阶段,设计了两种存储模型以及相应的原始表数据还原策略,即全量存储模型和索引指定列存储模型,并且在索引指定列存储模型中设计了一种用于原表数据还原、复杂度为O(n)的分区对齐连接算法,并在Spark SQL上进行了实现。实验结果表明,对比传统数据库如MySQL,在两种检索优化方案下,该系统索引构建的平均时间缩短为传统数据库的0.6%/0.5%,查询的平均时间缩短为传统数据库的1%/10%,在索引指定列存储模型下,索引存储量减少为传统数据库的55.0%。增强了Spark SQL数据分析功能,能够有效满足传统业务迁移以及现有业务对海量数据进行全文检索的需求。
附图说明
图1是本发明基于Spark SQL的分布式全文检索系统的组成框图;
图2是本发明SQL翻译引擎将全文检索SQL语句转换为物理执行计划的过程;
图3是本发明中的全文检索过程并行化方法;
图4是本发明中的全量存储模型和原表数据还原方法;
图5是本发明中的索引指定列存储模型和原表数据还原方法;
图6是本发明Spark SQL与MySQL建立索引和查询的执行时间对比实验;
图7是本发明Spark SQL与MySQL索引存储量以及原始数据的存储量的对比实验。
具体实施方式
以下结合具体实施例和附图对本发明作更详细的说明。
如图1所示,本发明基于Spark SQL设计实现了面向关系数据的分布式全文检索系统,系统包括SQL翻译层、数据源管理层、并行计算层、分布式存储层四个部分。在SQL翻译层中提出了基于SQL的全文检索的文法以及全文检索SQL语句在SQL翻译层各模块间的翻译过程;在数据源管理模块设计了一种全文检索过程的并行化方法;检索优化模块中,针对索引建立阶段,设计了两种存储模型以及相应的原始表数据还原策略,即全量存储模型和索引指定列存储模型,并且在索引指定列存储模型中设计了一种用于原表数据还原、复杂度为O(n)的分区对齐连接算法,并在Spark SQL上进行了实现。
1.全文检索文法和SQL转换为数据源接口调用的方法
如图2所示为图1中SQL翻译层对全文检索文法的详细翻译过程。
例如对于索引建立语句:CREATE INDEX index_name ON table_name(body)。该语句对表table_name的body列建立索引,索引的存储表名称为index_name。文法解析模块首先将SQL解析为具有祖先关系的三个节点即索引建立节点、映射节点以及数据源节点的逻辑计划树,该树表明选取table_name表的body列数据建立索引,并且索引存储为另一张表index_name;在元数据分析和校验模块中,数据源节点与元数据进行关联;在物理计划生成模块中,索引建立逻辑计划节点转换为索引建立物理计划节点;在物理计划执行模块中,调用索引数据源的索引建立接口。
对于查询语句:SELECT score,body FROM index_name WHERE QUERYPARSER(‘nothisfield’,’body:person’,’3’)。该语句利用QUERYPARSER表达式查询方式对索引表进行检索,而在查询关键词中,指定在body列上检索具有person单词的数据,最终返回全局得分Top 3的结果,结果拥有两列数据,即body列和新添加的score列的数据。文法解析模块首先将SQL解析为具有三个节点的逻辑计划树即映射节点、查询条件节点和数据源节点,该树表明对索引index_name利用QUERYPARSER进行检索,分区检索结果返回只body列和新添加的score列的数据;在元数据分析和校验模块中,数据源节点与元数据进行关联;在计划树优化模块中,将映射节点和查询条件节点下推至数据源;在物理计划生成模块中,索引查询逻辑计划节点转换为扫描数据源物理计划节点;在物理计划执行模块中,调用索引数据源的查询接口。
2.全文检索过程的并行化
全文检索过程的并行化如图3所示。
例如对于索引建立SQL语句:CREATE INDEX index_name ON table_name(body),table_name表由三个数据分片组成,对表的每个分片生成一个任务,生成的三个索引分片并行写入分布式存储层。
对于基于索引的查询语句:SELECT score,body FROM index_name WHEREQUERYPARSER(‘nothisfield’,’body:person’,’3’)。index_name表的每一个索引分片构建一个查询任务,table_name用于在索引指定列存储模型中读取原表信息,每个查询得到的结果通过全局聚合操作得到全局得分Top K的结果,结果返回形式与数据库表的形式一致,包含得分以及在SELECT中指定的列。
3.检索优化方案
索引的处理依赖于开源分词和索引工具Lucene,其中,只有分词和索引的列能够通过关键词找到,而存储的列可以直接从索引中获取存储的原始信息。
图4、5分别展示了在全量存储模型、索引指定列存储模型下,数据源管理层中索引存储以及查询的结果中原始表数据还原的详细处理过程。
如图4所示,当使用全量存储模型建立索引的SQL语句:CREATE INDEX index_nameON table_name(body)STRATEGY quickway。body为指定索引列,则body列的数据会被分词、建立词典、倒排链表以及存储,而id列只会被存储。当使用SQL语句SELECT score,bodyFROM index_name WHERE QUERYPARSER(‘nothisfield’,’body:person’,’3’)查询时,由于索引中存储了所有列即id和body列的原始数据信息,因此,可以直接从索引读取id和body数据,并加入新的得分列,之后,使用列裁剪只保留score和body列的数据。
如图5所示,当使用索引指定列存储模型建立索引的SQL语句:CREATEINDEXindex_name ON table_name(body)STRATEGY noquick。body为指定列,则只有body会被分词、建立词典、倒排链表,由于所有的列都不进行存储,检索结果中只包含得分数据,所以id和body列的数据需要从原始表读取,读取的过程采用分区对齐连接算法,加入新的得分列之后,使用列裁剪只保留score和body列的数据,最终的结果包含原始数据的body列和新加入的得分列,最终返回结果的形式与全量存储模型一致。
由于在两种存储模型下,得到的结果为一个包含多分区的数据集,各分区内是符合关键词的Top K结果,因此,需要进行全局Reduce操作,得到只有一个分区的数据集,数据集的总行数为Top K。
图1中的分布式存储层采用HDFS分布式文件系统,HDFS分布式文件系统作为一个独立的文件系统,不依赖于Spark执行环境,文件存储在分布式环境下透明化并且文件具有统一的资源可见性,查询的作业能够使用索引建立作业中建立的索引。
基于Spark SQL的分布式全文检索系统的评测如下:
实验使用了10台物理机(一台master,九台slave),每台物理机内存为16G,CPU为Intel(R)Core(TM)i7-2600CPU@3.40GHz 8核心,hadoop版本为2.7.1,spark版本为基于社区最新master分支并加入全文检索模块的分支版本,运行在standalone模式下,集群最大的有效Executor数目为36。测试集使用了The Westbury Lab USENET Corpus,共包含32440001篇文档,针对实验环境,选取了前Mi篇文档作为实验数据,由于运算能力有限,Mi最大值为3243904,文档数与文本形式的空间占用量对应如下:
图6是Spark SQL与MySQL索引建立和查询的执行时间对比实验,实验表明,在全量存储模型和索引指定列存储模型下,Spark SQL索引构建时间是传统数据库的0.6%/0.5%,查询时间是传统数据库的1%/10%。MySQL难以适应海量数据的全文检索;SparkSQL检索的并行化有效缓解了数据量快速上升带来的性能瓶颈问题;索引指定列存储模型只存储一部分数据,节省了大量的磁盘IO操作,相比于全量存储模型,平均执行时间减少了17%。在索引指定列存储模型中,由于获取原表数据需要执行分区对齐连接算法,因此,索引指定列存储模型执行时间比全量存储模型执行时间长。
图7是Spark SQL与MySQL索引存储量以及原始数据的存储量的对比,实验表明,索引指定列存储模型的索引存储量是MySQL的55.0%,是全量存储模型的36.7%;由于只存储必要的分词和索引信息,不存储原始文档,因此,随着数据量和列数的增加,索引指定列存储模型优势将更加明显。
总之,本发明克服现有数据分析工具不支持海量数据下全文检索的问题,在大数据查询分析方面,实验结果表明,对比传统数据库如MySQL,在两种检索优化方案下,该系统索引构建的平均时间缩短为传统数据库的0.6%/0.5%,查询的平均时间缩短为传统数据库的1%/10%,在索引指定列存储模型下,索引存储量减少为传统数据库的55.0%。本发明增强了Spark SQL数据分析功能,能够有效满足传统业务迁移以及现有业务对海量数据进行全文检索的需求。
尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,在其他平台上也可以实现相应的方法与工具。因此,本发明不应局限于实施例和附图所公开的内容。
Claims (6)
1.一种基于Spark SQL的分布式全文检索系统,其特征在于:包括SQL翻译层、数据源管理层、并行计算层、分布式存储层;
SQL翻译层定义了全文检索文法,包括索引建立文法和查询文法,通过接收用户输入的全文检索SQL语句,翻译转换为对索引数据源的接口调用;该层包括文法解析模块、元数据绑定和校验模块、计划树优化模块、物理计划生成模块和物理计划执行模块;文法解析模块首先对输入的SQL语句进行切分,去掉空格形成词序数组;之后根据全文检索文法,提取词序数组中的关键信息,在索引建立过程中,关键信息包括原表名、索引表名、索引列、存储模型,在查询过程中,关键信息包括索引表名、返回结果包含的列名、查询类型、查询条件,这些关键信息分别形成一个语法节点,最终形成一颗语法树;然后对语法树进行遍历,对索引建立语句形成的语法树中原表名节点转换为未关联元数据的数据源节点,索引列节点转换为映射节点,索引表名和存储模型节点转换为索引建立节点,形成逻辑计划树;对查询语句形成的语法树中索引表名节点转换为未关联元数据的数据源节点,返回结果包含的列名节点转换为映射节点,查询类型和查询条件语法树节点转换为查询条件计划树节点,形成逻辑计划树;元数据绑定和校验模块对文法解析模块生成的逻辑计划树中实际类型为表、列、视图的节点与元数据仓库进行关联,校验成功的同时将这些节点替换为关联元数据的数据源节点;计划树优化模块仅对索引查询的计划树进行优化,该计划树优化模块将查询条件计划树节点利用过滤下推技术下推到数据源节点并去掉计划树中的查询条件计划树节点,同时利用列裁剪技术将映射节点包含的映射内容下推到数据源节点并去掉计划树中的映射节点;在索引建立过程中,物理计划生成模块合并数据源节点、映射节点和索引建立节点生成索引建立物理计划节点,在查询过程中,将数据源节点转换为扫描数据源物理计划节点,生成物理计划树;在索引建立过程中,物理计划执行模块将索引建立物理计划节点转化为对索引数据源索引建立接口的调用,调用参数包含了原表名、索引列、存储模型和索引表名,然后索引表的元数据信息中加入原表的名称并存入元数据仓库,在查询过程中,物理计划执行模块将扫描数据源物理计划节点转化为对索引数据源查询接口的调用,调用参数包含了索引表名、查询类型和条件、返回结果包含的列名;
数据源管理层,根据SQL翻译层对索引数据源的接口调用,转换为索引建立或查询的数据处理逻辑,交给并行计算层执行;数据源管理层包括数据源管理模块和检索优化模块;数据源管理模块管理目前Spark支持的所有数据源,根据SQL翻译层的索引数据源调用,实例化索引数据源,索引数据源包含全文检索过程的并行化方法即索引建立过程并行化和查询过程并行化;数据源管理模块将实例化的索引数据源传入检索优化模块对索引数据源中的索引建立和查询过程进行优化,检索优化模块针对索引建立过程设计了两种存储模型,包括全量存储模型和索引指定列存储模型,针对查询过程为与存储模型相对应的原表数据还原策略,原表数据还原策略的输出为得分与相对应的原表数据拼接后的结果,其中,基于索引指定列存储模型为一种用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法,该算法获取原表数据并与得分数据进行拼接;最终,检索优化模块的输出为优化过的索引建立或查询过程的数据处理逻辑,交给并行计算层;
并行计算层,接收数据源管理层的数据处理逻辑,生成作业,并对作业进行规划,分配集群资源,将作业数据处理逻辑分发到每个物理机器上,之后,各物理机器上并行执行作业;
分布式存储层接收并行计算层对于文件读写的接口调用,采用分布式读写的方式进行索引的建立和查询,建立的索引和查询的结果都存储在分布式索引层,并返回执行结果。
2.根据权利要求1所述的基于Spark SQL的分布式全文检索系统,其特征在于:所述全文检索的SQL文法中,索引建立文法和查询文法,实现步骤如下:
索引建立文法包括需要建立索引的原表名称,由SQL中的ON关键词指定的需要建立索引的列,存储索引的表名称,设计了STRATEGY、QUICKWAY、NOQUICK关键字,索引建立使用的存储模型由STRATEGY后的QUICKWAY、NOQUICK关键字指定,QUICKWAY为全量存储模型,NOQUICK为索引指定列存储模型;SQL翻译层中的文法解析模块根据索引建立文法提取原表名、索引表名,建立索引的列,存储模型信息,转换为语法树中的节点;
查询文法包括存储索引的表名称,返回结果包含的列名,查询类型,查询条件,查询类型包括词项查询、模糊查询、段查询、前缀查询、表达式查询,分别由设计的新关键字TERMQUERY、FUZZYQUERY、PHRASEQUERY、PREFIXQUERY、QUERYPARSER指定;查询条件包括查询的列、关键词、编辑距离和返回的结果包含的行数,SQL翻译层中的文法解析模块根据查询文法提取索引表名、返回结果包含的列名信息、查询类型、查询条件,转换为语法树中的节点。
3.根据权利要求1所述的基于Spark SQL的分布式全文检索系统,其特征在于:所述数据源管理模块中,索引数据源包含了全文检索过程的并行化方法即索引建立过程并行化和查询过程并行化,步骤如下:-
索引建立过程并行化的实现步骤:
(1)将原表数据分片存储在若干个物理节点上,每个节点为一个分区;
(2)对于原表每一个分片所在的节点,启动一个索引建立任务,读取分区数据建立索引;
(3)将该分区产生的索引写入分布式存储层,成为一个索引分片;
查询过程并行化的实现步骤:
(1)在每一个索引分片所在的节点,启动一个索引查询任务,读取索引数据并根据查询类型和条件返回查询结果,每个分片的查询结果为一个分区;
(2)将查询结果写入分布式存储层;
(3)通过全局聚合操作将分布在不同节点上的查询结果根据得分进行聚合,得到全局得分排名前K的行,其中K由查询条件中指定。
4.根据权利要求1所述的基于Spark SQL的分布式全文检索系统,其特征在于:所述检索优化模块中,针对索引建立过程定义了两种存储模型包括全量存储模型和索引指定列存储模型,针对查询过程定义了与存储模型相应的原表数据还原策略,步骤如下:
全量存储模型和原表数据还原策略的实现步骤:
(1)在索引建立时,从原表按行读入所有列的数据;
(2)针对每一行数据,在建立倒排索引表时,只有SQL的ON关键字指定的索引列才会被分词、建立词典和倒排索引表;
(3)对每一行数据,索引中额外存储所有列的数据;
(4)在查询时,由于索引中存储原表中所有列的数据,因此,原表数据直接从索引中还原;
(5)将得分与还原的原表数据中对应的行进行拼接;
索引指定列存储模型和原表数据还原策略的实现步骤:
(1)在索引建立时,从原表按行读入所有列的数据;
(2)针对每一行数据,在建立倒排索引表时,只有SQL的ON关键字指定的索引列才会被分词、建立词典和倒排索引表;
(3)在查询时,由于索引中未存储原表任何列的数据,因此根据索引表元数据信息中的原表名,从元数据仓库获取原表的分区数据信息;
(4)使用用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法读取原表的分区数据信息并将得分与原表数据中对应的行进行拼接。
5.根据权利要求1或4所述的基于Spark SQL的分布式全文检索系统,其特征在于:所述数据源管理层的检索优化模块中,用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法,实现步骤如下:
(1)利用弹性分布式数据集RDD(RDD,Resilient Distributed Datasets)的分区对齐操作使得原表数据分区与查询结果数据分区对齐;
(2)在查询结果的分区内,记录查询结果需要获取的所有原表数据的偏移量和偏移量对应的得分;
(3)在原表的分区内通过迭代和记录偏移量的方式找到符合的偏移量,将得分与还原的原表数据对应的行进行拼接;
(4)遍历所有映射分区,直到连接操作全部完成。
6.一种基于Spark SQL的分布式全文检索方法,其特征在于步骤如下:
(1)首先对输入的SQL语句进行切分,去掉空格形成词序数组;之后根据全文检索文法,提取词序数组中的关键信息,在索引建立过程中,关键信息包括原表名、索引表名、索引列、存储模型,在查询过程中,关键信息包括索引表名、返回结果包含的列名、查询类型、查询条件,这些关键信息分别形成一个语法节点,最终形成一颗语法树;然后对语法树进行遍历,对索引建立语句形成的语法树中原表名节点转换为未关联元数据的数据源节点,索引列节点转换为映射节点,索引表名和存储模型节点转换为索引建立节点,形成逻辑计划树;对查询语句形成的语法树中索引表名节点转换为未关联元数据的数据源节点,返回结果包含的列名节点转换为映射节点,查询类型和查询条件语法树节点转换为查询条件计划树节点,形成逻辑计划树;将逻辑计划树中实际类型为表、列、视图的节点与元数据仓库进行关联,校验成功的同时将这些节点替换为关联元数据的数据源节点;对索引查询的计划树进行优化,将查询条件计划树节点利用过滤下推技术下推到数据源节点并去掉计划树中的查询条件计划树节点,同时利用列裁剪技术将映射节点包含的映射内容下推到数据源节点并去掉计划树中的映射节点;在索引建立过程中,合并数据源节点、映射节点和索引建立节点生成索引建立物理计划节点,在查询过程中,将数据源节点转换为扫描数据源物理计划节点,生成物理计划树;在索引建立过程中,将索引建立物理计划节点转化为对索引数据源索引建立接口的调用,调用参数包含了原表名、索引列、存储模型和索引表名,然后索引表的元数据信息中加入原表的名称并存入元数据仓库,在查询过程中,将扫描数据源物理计划节点转化为对索引数据源查询接口的调用,调用参数包含了索引表名、查询类型和条件、返回结果包含的列名;
(2)实例化索引数据源,对索引数据源中的索引建立和查询过程进行优化,在索引建立过程中,根据参数中的存储模型建立索引,在查询过程中,根据索引建立时的存储模型选择相应的原表数据还原策略,将得分与相对应的原表数据拼接,其中,基于索引指定列存储模型使用的是一种用于在查询时还原原表数据、复杂度为O(n)的分区对齐连接算法;最终,将优化过的索引建立或查询过程的数据处理逻辑,交给并行计算层;
(3)接收数据处理逻辑,生成作业,并对作业进行规划,分配集群资源,将作业数据处理逻辑分发到每个物理机器上,之后,各物理机器上并行执行作业;
(4)采用分布式读写的方式进行索引的建立和查询,建立的索引和查询的结果都存储在分布式索引层,并返回执行结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710269870.2A CN107122443B (zh) | 2017-04-24 | 2017-04-24 | 一种基于Spark SQL的分布式全文检索系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710269870.2A CN107122443B (zh) | 2017-04-24 | 2017-04-24 | 一种基于Spark SQL的分布式全文检索系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107122443A CN107122443A (zh) | 2017-09-01 |
CN107122443B true CN107122443B (zh) | 2019-09-17 |
Family
ID=59726004
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710269870.2A Active CN107122443B (zh) | 2017-04-24 | 2017-04-24 | 一种基于Spark SQL的分布式全文检索系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107122443B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334532B (zh) * | 2017-09-27 | 2021-08-03 | 华南师范大学 | 一种基于Spark的Eclat并行化方法、系统及装置 |
CN107943952B (zh) * | 2017-11-24 | 2020-10-13 | 北京赛思信安技术股份有限公司 | 一种基于Spark框架进行全文检索的实现方法 |
CN107818181A (zh) * | 2017-11-27 | 2018-03-20 | 深圳市华成峰科技有限公司 | 基于Plcient交互式引擎的索引方法及其系统 |
CN108009152A (zh) * | 2017-12-04 | 2018-05-08 | 陕西识代运筹信息科技股份有限公司 | 一种基于Spark-Streaming的文本相似性分析的数据处理方法和装置 |
CN108563923B (zh) * | 2017-12-05 | 2020-08-18 | 华南理工大学 | 一种基因变异数据分布式存储方法及系统 |
CN108897776A (zh) * | 2018-06-01 | 2018-11-27 | 郑州云海信息技术有限公司 | 一种数据信息的运算处理方法、装置及计算机存储介质 |
CN110597615B (zh) * | 2018-06-12 | 2022-07-01 | 杭州海康威视数字技术股份有限公司 | 一种编码指令的处理方法和节点设备 |
CN110750582B (zh) * | 2018-07-23 | 2023-05-02 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置和系统 |
CN109271428A (zh) * | 2018-09-11 | 2019-01-25 | 北京市计算中心 | 数据抽取方法及基于地理信息的数据展示方法 |
CN109299239B (zh) * | 2018-09-29 | 2021-11-23 | 福建弘扬软件股份有限公司 | 一种基于es的电子病历检索方法 |
CN109271409B (zh) * | 2018-11-08 | 2021-11-02 | 成都索贝数码科技股份有限公司 | 一种基于容器资源分配的数据库分片执行方法 |
CN109299131B (zh) | 2018-11-14 | 2020-05-29 | 百度在线网络技术(北京)有限公司 | 一种支持可信计算的spark查询方法及系统 |
CN109597810B (zh) * | 2018-11-21 | 2021-11-09 | 金色熊猫有限公司 | 一种任务切分方法、装置、介质及电子设备 |
CN111221851A (zh) * | 2018-11-27 | 2020-06-02 | 北京京东尚科信息技术有限公司 | 一种基于Lucene的海量数据查询、存储的方法和装置 |
CN110046176B (zh) * | 2019-04-28 | 2023-03-31 | 南京大学 | 一种基于Spark的大规模分布式DataFrame的查询方法 |
CN110389953B (zh) * | 2019-05-24 | 2021-10-29 | 中国科学院计算技术研究所 | 基于压缩图的数据存储方法、存储介质、存储装置和服务器 |
CN110413734B (zh) * | 2019-07-25 | 2023-02-17 | 万达信息股份有限公司 | 一种医疗服务的智能搜索系统及方法 |
CN110737667A (zh) * | 2019-10-26 | 2020-01-31 | 南京录信软件技术有限公司 | 一种基于Spark的索引方法 |
CN110968895B (zh) * | 2019-11-29 | 2022-04-05 | 北京百度网讯科技有限公司 | 一种数据的处理方法、装置、电子设备及存储介质 |
CN111078705A (zh) * | 2019-12-20 | 2020-04-28 | 南京聚力云成电子科技有限公司 | 基于Spark平台建立数据索引方法及数据查询方法 |
CN113836163A (zh) * | 2020-06-23 | 2021-12-24 | 南京中兴软件有限责任公司 | 数据的关联查询方法、装置、设备及存储介质 |
CN111984680B (zh) * | 2020-08-12 | 2022-04-19 | 北京海致科技集团有限公司 | 基于Hive分区表实现物化视图性能优化的方法及系统 |
CN112084248A (zh) * | 2020-09-11 | 2020-12-15 | 党丹 | 基于图数据库的智能数据检索查阅与模型获取方法 |
CN112231321B (zh) * | 2020-10-20 | 2022-09-20 | 中国电子科技集团公司第二十八研究所 | 一种Oracle二级索引及索引实时同步方法 |
CN112364027B (zh) * | 2020-12-09 | 2023-06-30 | 北京海量数据技术股份有限公司 | 并行创建openGauss分区表索引方法、装置及系统 |
CN112835930A (zh) * | 2021-03-03 | 2021-05-25 | 上海渠杰信息科技有限公司 | 一种数据库的查询方法及设备 |
CN112685428B (zh) * | 2021-03-10 | 2021-07-06 | 南京烽火星空通信发展有限公司 | 一种基于海量位置轨迹数据时空分析方法 |
CN113704296A (zh) * | 2021-08-03 | 2021-11-26 | 浪潮云信息技术股份公司 | 一种基于Spark SQL的计算下推查询优化方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104731945A (zh) * | 2015-03-31 | 2015-06-24 | 浪潮集团有限公司 | 一种基于HBase的全文检索方法及装置 |
US20150339376A1 (en) * | 2012-08-02 | 2015-11-26 | Artificial Solutions Iberia SL | Natural language data analytics platform |
CN106484877A (zh) * | 2016-10-14 | 2017-03-08 | 东北大学 | 一种基于hdfs的文件检索系统 |
-
2017
- 2017-04-24 CN CN201710269870.2A patent/CN107122443B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150339376A1 (en) * | 2012-08-02 | 2015-11-26 | Artificial Solutions Iberia SL | Natural language data analytics platform |
CN104731945A (zh) * | 2015-03-31 | 2015-06-24 | 浪潮集团有限公司 | 一种基于HBase的全文检索方法及装置 |
CN106484877A (zh) * | 2016-10-14 | 2017-03-08 | 东北大学 | 一种基于hdfs的文件检索系统 |
Non-Patent Citations (1)
Title |
---|
大数据分布式全文检索系统的设计与实现;李聪颖等;《计算机与数字工程》;20161231;第44卷(第12期);第2426-2430页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107122443A (zh) | 2017-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107122443B (zh) | 一种基于Spark SQL的分布式全文检索系统及方法 | |
JP6617117B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
JP2022534215A (ja) | ハイブリッド・インデックス作成方法、システム、プログラム | |
CN111767303A (zh) | 一种数据查询方法、装置、服务器及可读存储介质 | |
CN103488680A (zh) | 建立搜索引擎的组合算符 | |
CN105912666A (zh) | 一种面向云平台的混合结构数据高性能存储、查询方法 | |
CN103631922A (zh) | 基于Hadoop集群的大规模Web信息提取方法及系统 | |
CN104239377A (zh) | 跨平台的数据检索方法及装置 | |
CN107943952A (zh) | 一种基于Spark框架进行全文检索的实现方法 | |
Xiong et al. | Data vitalization: a new paradigm for large-scale dataset analysis | |
Khan et al. | Predictive performance comparison analysis of relational & NoSQL graph databases | |
Chrysafis et al. | Foundationdb record layer: A multi-tenant structured datastore | |
Das et al. | A study on big data integration with data warehouse | |
CN107818181A (zh) | 基于Plcient交互式引擎的索引方法及其系统 | |
Hashem et al. | An Integrative Modeling of BigData Processing. | |
Wieder et al. | Toward data lakes as central building blocks for data management and analysis | |
El Alami et al. | Supply of a key value database redis in-memory by data from a relational database | |
Russell | Getting started with Impala: interactive SQL for Apache Hadoop | |
Chang | The Analysis of Open Source Search Engines | |
Pivert | NoSQL data models: trends and challenges | |
US12061579B2 (en) | Database gateway with machine learning model | |
Li | Introduction to Big Data | |
Ahmed et al. | A study of big data and classification of nosql databases | |
Gadepally et al. | Technical Report: Developing a Working Data Hub | |
Zhang et al. | The research and design of SQL processing in a data-mining system based on MapReduce |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |