CN107291770B - 一种分布式系统中海量数据的查询方法及装置 - Google Patents
一种分布式系统中海量数据的查询方法及装置 Download PDFInfo
- Publication number
- CN107291770B CN107291770B CN201610221574.0A CN201610221574A CN107291770B CN 107291770 B CN107291770 B CN 107291770B CN 201610221574 A CN201610221574 A CN 201610221574A CN 107291770 B CN107291770 B CN 107291770B
- Authority
- CN
- China
- Prior art keywords
- query
- size
- data
- hive
- condition
- 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
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式系统中海量数据的查询方法及查询装置,其中,所述方法包括:对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务;根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径。
Description
技术领域
本发明涉及数据查询技术,尤其涉及一种分布式系统中海量数据的查询方法及装置。
背景技术
大数据现在已经进入全球经济的各个部门。就像其他的生产必备要素(例如,硬资产和人力资本)一样,许多现代经济活动离开了它也根本不能发生。大数据的使用正成为领先企业在业绩方面超越其同行的一种重要方式。企业可以利用数据来设计与客户需求更匹配的产品。甚至可以利用数据对使用中的产品进行改进。一个此类例子是,一款能了解使用者习惯和偏好、装有针对这一特定使用者的需求而定制的应用和数据的手机要比一部新的非定制设备更有价值。
为了更有效利用这些数据,提升企业的竞争力,必须有相应的手段来快速、准确、高效地对海量的数据进行分析,挖掘数据中存在的潜在价值,并将其转化成决策的依旧,而作为大数据分析的产品Hadoop应运而生。Hadoop作为一个分布式产品,通过大量廉价的硬件设备组成的集群上运行应用程序,全面地将计算推向数据。HIVE作为一个基于Hadoop的数据仓库平台,它可以将结构化的数据文件映射成一张数据表,通过它,我们可以方便地进行ETL的工作。HIVE定义了一个类似于SQL的查询语言:HQL,能够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行,而不需要另外开发专门mapreduce应用,对于数据分析人员来说,基于关系型数据库的SQL的编写已经作为一个基本要求,HIVE的出现将Hadoop上的开发降低了很多门槛。HIVE的提出是作为数据离线数据分析产品,相对的针对大量数据的在线分析产品Impala也随后出现。Impala作为在线分析产品,他要求能够快速的返回用户的查询需求,他最大特点也是最大卖点就是它的快速,他和HIVE一样都是基于hdfs文件系统,都支持类SQL语句。
现有技术存在的问题如下所述:
由于现有HIVE和Impala在处理海量数据分析的时候存在各种的缺陷。就HIVE而言,它是通过将SQL语句自动转化成mapreduce任务,然后通过mapreduce计算框架进行数据分析处理,为此HIVE的性能完全受限于mapreduce本身的性能,而mapreduce框架设计的初衷就是为了面对海量离线数据存储,通过分布式运算来提高处理性能,因而mapreduce底层更多考虑的是如何提升处理的数据量以及增加处理的节点数,而出于对性能方面的考虑会稍后于前面2者。mapreduce处理分成map和reduce 2个阶段,在处理一个查询操作时,mapreduce会先对输入数据文件进行切分(split),将整个查询分成一连串的map任务(task),每个map task根据业务需求获取有效数据,即数据筛选,这些task分布在不同的节点上运行,并将这些中间数据结果以key-value的方式进行存储到执行该map task的节点的本地磁盘上,然后在根据key将各节点上的中间数据进行洗牌(shuffle),再聚集到各个计算节点上进行最终的reduce处理,输出数据文件。在这个过程中,中间数据结果保存在磁盘上,然后又从数据磁盘中读取,通过网络在整个集群中进行数据传输,都会大大影响整个查询的性能,而mapreduce框架追求的是更大规模的集群以及更大量的数据集,这也加剧这部分性能的损耗。当处理的数据集相对海量数据较小时,再调用如此臃肿的框架进行计算,对查询的性能来说影响非常大,可能查询只需要几秒钟,而框架调度上却需要消耗几倍甚至几十倍的时间,对数据分析来说这点让人难以忍受,虽然HIVE针对这种情况提出的简单查询(fetch)的方法,但这种方法的一方面适用性有限,另一方面需要人工的过度干预,效果并不是很理想。
就Impala而言,Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的HIVE+MapReduce批处理,而是通过使用与商用并行关系数据库(MPP)中类似的分布式查询引擎,可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。在处理一个查询时,Impala先通过语法解析器(jflex)解析SQL语句,翻译成一棵完整的执行计划树,调度器把执行计划分发给具有相应数据的其它Impalad进行执行,并将查询结果通过流的方式进行汇总,最终返回给发起查询的客户端上。和HIVE相比,在这个过程中,不会产生中间数据,也不会将中间结果进行shuffle操作,各节点的调度上也不会出现复杂的情况,因此和HIVE相比大大提升了查询性能。但由于Impala查询的结果并不写入磁盘,而是保存在内存中,通过流进行传输,为此受限于服务器硬件内存限制,只能处理有限的数据量集合,当数据量超过物理内存大小时,虽然新版的Impala会使用到外存,但这个处理性能就会降低非常多。根据在一个小的测试环境中验证,在小数据量级别的查询中Impala性能比HIVE提升3~10倍,而随着数据量的增加,这个性能比逐渐降低,超过一定值后HIVE性能反而更高。
无论采用上述HIVE和Impala中哪一种查询方案,都会存在各自的问题,然而,相关技术中对此并未存在有效的解决方案。
发明内容
有鉴于此,本发明实施例希望提供一种分布式系统中海量数据的查询方法及装置,至少解决了现有技术存在的问题。
本发明实施例的技术方案是这样实现的:
本发明实施例的一种分布式系统中海量数据的查询方法,所述方法包括:
对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务;
根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径。
上述方案中,所述方法还包括:
将查询请求需要的数据进行分布式存储。
上述方案中,所述方法还包括:
获取所述执行任务中的每个操作数据表对应的数据文件大小、集群可用内存大小。
上述方案中,所述对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务,包括:
将用于表征业务分析需求的语句通过所述HIVE查询引擎对应的HIVE算法进行解析,分析生成的所述执行任务,获取所述执行任务中的操作数据表名字、操作的字段名和语句中的查询条件。
上述方案中,根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径,包括:
当数据文件大小超过集群可用内存大小的预设阈值时,使用所述HIVE查询引擎对应的HIVE算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照HIVE算法执行数据查询和结果输出,生成所述新的执行路径;
当数据文件大小未超过集群可用内存大小的预设阈值时,使用Impala查询引擎对应的Impala算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照Impala算法执行数据查询和结果输出,生成所述新的执行路径。
上述方案中,所述方法还包括:
将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较之前,结合每个操作数据表中的统计信息,获取到每个操作数据表对应的数据文件大小,如果通过所述HIVE算法进行解析得到的解析结果中包含分区表,则在获取操作数据表对应的数据文件大小时,只需获取对应的分区文件大小。
上述方案中,所述方法还包括:
判断是单表查询还是多表查询;
当执行所述单表查询时,执行所述将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较;
当执行所述多表查询时,将所有操作数据表大小总和与集群可用内存大小进行比较。
上述方案中,所述将所有操作数据表大小总和与集群可用内存大小进行比较,包括:
当所述所有操作数据表大小总和小于所述集群可用内存大小的预设阈值时,如果有where过滤条件的表,则将所述有where过滤条件的表进行数据过滤;如果没有where过滤条件的表,则使用所述HIVE算法进行数据查询和结果输出;
当所述所有操作数据表大小总和大于等于所述集群可用内存大小的预设阈值时,使用所述Impala算法进行数据查询和结果输出。
本发明实施例的一种分布式系统中海量数据的查询装置,所述装置包括:解析单元和处理单元;其中,
所述解析单元,用于对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务;
所述处理单元,用于根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径。
上述方案中,所述装置还包括:
所述存储单元,用于将查询请求需要的数据进行分布式存储。
上述方案中,所述装置还包括:
获取单元,用于获取所述执行任务中的每个操作数据表对应的数据文件大小、集群可用内存大小。
上述方案中,所述解析单元,还包括:
分析接口,用于将用于表征业务分析需求的语句通过所述HIVE查询引擎对应的HIVE算法进行解析;
分析执行任务子单元,用于分析生成的所述执行任务;
获取表名子单元,用于获取所述执行任务中的操作数据表名字和操作的字段名;
获取查询条件子单元,用于获取语句中的查询条件。
上述方案中,所述处理单元,进一步用于:
当数据文件大小超过集群可用内存大小的预设阈值时,使用所述HIVE查询引擎对应的HIVE算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照HIVE算法执行数据查询和结果输出,以生成所述新的执行路径;
当数据文件大小未超过集群可用内存大小的预设阈值时,使用Impala查询引擎对应的Impala算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照Impala算法执行数据查询和结果输出,以生成所述新的执行路径。
上述方案中,所述处理单元,进一步用于将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较之前,结合每个操作数据表中的统计信息,获取到每个操作数据表对应的数据文件大小,如果通过所述HIVE算法进行解析得到的解析结果中包含分区表,则在获取操作数据表对应的数据文件大小时,只需获取对应的分区文件大小。
上述方案中,所述处理单元,进一步用于:
判断是单表查询还是多表查询;
当执行所述单表查询时,执行所述将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较;
当执行所述多表查询时,将所有操作数据表大小总和与集群可用内存大小进行比较。
上述方案中,所述处理单元,进一步用于:
当所述所有操作数据表大小总和小于所述集群可用内存大小的预设阈值时,如果有where过滤条件的表,则将所述有where过滤条件的表进行数据过滤;如果没有where过滤条件的表,则使用所述HIVE算法进行数据查询和结果输出;
当所述所有操作数据表大小总和大于等于所述集群可用内存大小的预设阈值时,使用所述Impala算法进行数据查询和结果输出。
本发明实施例的分布式系统中海量数据的查询方法包括:对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务;根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径。采用本发明实施例,通过分布式存储和分布式查询,提高了查询效率,避免了上述HIVE和Impala中任何一个查询方案的缺陷。
附图说明
图1为本发明实施例的方法流程图;
图2为本发明实施例的装置组成结果示意图;
图3为本发明实施例中基于图2所示的装置执行的运行流程图;
图4为应用本发明实施例的HIVE算法得到的语句实例的示意图;
图5为应用本发明实施例的HIVE算法和/或Impal算法得到的装置执行的运行流程图。
具体实施方式
下面结合附图对技术方案的实施作进一步的详细描述。
本发明实施例的分布式系统中海量数据的查询方法,如图1所示,所述方法包括:
步骤101、对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务;
步骤102、根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径。
在本发明实施例一实施方式中,所述方法还包括:将查询请求需要的数据进行分布式存储。具体的,对数据进行分布式存储,以便在启动分布式查询后,将所述数据提供给由至少两套分布式查询算法(如HIVE算法和Impala算法)所构造的分布式查询引擎使用。
在本发明实施例一实施方式中,所述方法还包括:
获取所述执行任务中的每个操作数据表对应的数据文件大小、集群可用内存大小。
在本发明实施例一实施方式中,所述对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务,包括:
将用于表征业务分析需求的语句通过所述HIVE查询引擎对应的HIVE算法进行解析,分析生成的所述执行任务,获取所述执行任务中的操作数据表名字、操作的字段名和语句中的查询条件。
在本发明实施例一实施方式中,根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径,包括:
当数据文件大小超过集群可用内存大小的预设阈值时,使用所述HIVE查询引擎对应的HIVE算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照HIVE算法执行数据查询和结果输出,以生成所述新的执行路径。
当数据文件大小未超过集群可用内存大小的预设阈值时,使用Impala查询引擎对应的Impala算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照Impala算法执行数据查询和结果输出,生成所述新的执行路径。
在本发明实施例一实施方式中,所述方法还包括:
将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较之前,结合每个操作数据表中的统计信息,获取到每个操作数据表对应的数据文件大小,如果通过HIVE算法进行解析得到的解析结果中包含分区表,则在获取操作数据表对应的数据文件大小时,只需获取对应的分区文件大小,而不是获取全表文件大小。
在本发明实施例一实施方式中,所述方法还包括:
判断是单表查询还是多表查询;
当执行所述单表查询时,执行所述将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较;
当执行所述多表查询时,将所有操作数据表大小总和与集群可用内存大小进行比较。
在本发明实施例一实施方式中,所述将所有操作数据表大小总和与集群可用内存大小进行比较,包括:
当所述所有操作数据表大小总和小于所述集群可用内存大小的预设阈值时,如果有where过滤条件的表,则将所述有where过滤条件的表进行数据过滤;如果没有where过滤条件的表,则使用HIVE算法进行数据查询和结果输出;
当所述所有操作数据表大小总和大于等于所述集群可用内存大小的预设阈值时,使用Impala算法进行数据查询和结果输出。
本发明实施例的分布式系统中海量数据的查询装置,所述装置包括:解析单元和处理单元;其中,
所述解析单元,用于对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务;
所述处理单元,用于根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径。
在本发明实施例一实施方式中,所述装置还包括:所述存储单元,用于将查询请求需要的数据进行分布式存储。具体的,对数据进行分布式存储,以便在启动分布式查询后,将所述数据提供给由至少两套分布式查询算法(如HIVE算法和Impala算法)所构造的分布式查询引擎使用。
在本发明实施例一实施方式中,所述装置还包括:
获取单元,用于获取所述执行任务中的每个操作数据表对应的数据文件大小、集群可用内存大小。
在本发明实施例一实施方式中,所述解析单元,还包括:
分析接口,用于将用于表征业务分析需求的语句通过所述HIVE查询引擎对应的HIVE算法进行解析;
分析执行任务子单元,用于分析生成的所述执行任务;
获取表名子单元,用于获取所述执行任务中的操作数据表名字和操作的字段名;
获取查询条件子单元,用于获取语句中的查询条件。
在本发明实施例一实施方式中,所述处理单元,进一步用于:
当数据文件大小超过集群可用内存大小的预设阈值时,使用所述HIVE查询引擎对应的HIVE算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照HIVE算法执行数据查询和结果输出,以生成所述新的执行路径;
当数据文件大小未超过集群可用内存大小的预设阈值时,使用Impala查询引擎对应的Impala算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,按照预设的判断策略执行数据查询和结果输出,以生成所述新的执行路径。
在本发明实施例一实施方式中,所述处理单元,进一步用于将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较之前,结合每个操作数据表中的统计信息,获取到每个操作数据表对应的数据文件大小,如果通过HIVE算法进行解析得到的解析结果中包含分区表,则在获取操作数据表对应的数据文件大小时,只需获取对应的分区文件大小。
在本发明实施例一实施方式中,所述处理单元,进一步用于:
判断是单表查询还是多表查询;
当执行所述单表查询时,执行所述将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较;
当执行所述多表查询时,将所有操作数据表大小总和与集群可用内存大小进行比较。
在本发明实施例一实施方式中,所述处理单元,进一步用于:
当所述所有操作数据表大小总和小于所述集群可用内存大小的预设阈值时,如果有where过滤条件的表,则将所述有where过滤条件的表进行数据过滤;如果没有where过滤条件的表,则使用HIVE算法进行数据查询和结果输出(具体的,这个过程也可以由HIVE执行引擎来处理);
当所述所有操作数据表大小总和大于等于所述集群可用内存大小的预设阈值时,使用Impala算法进行数据查询和结果输出(具体的,这个过程也可以由Impala执行引擎来处理)。
以一个现实应用场景为例对本发明实施例阐述如下:
对于海量数据分析和查询的应用场景,有各种分析和查询方法,如HIVE和Impala,但是都存在各种的缺点,针对HIVE对相对海量数据较小数据量集合查询慢和Impala对海量数据和复杂查询慢的缺点,本发明实施例针对海量数据,以提高查询性能为目标,进一步提高了海量数据分析的能力,提升了数据分析产能。对原有分布式系统中大数据分析的方案进行了优化,对于该应用场景,本发明实施例提供了一种基于大数据在分布式系统中的快速查询方案,针对海量数据,整合HIVE、Impala两种分布式分析查询为该装置基础分析工具,在工具之上利用HIVE执行计划中的关键属性(如表名、大小、条件等)结合两种技术的计算框架优势,重新组织业务分析需求的语句执行路径。以达到执行效率优化的目的。
为了更好的说明本方案在数据分析中的作用,图2作为分布式系统中海量数据的查询的分析优化装置图,提供了该装置的功能框架,对海量数据分析优化装置各层具体说明如下:
数据存储11:海量数据存储介质,基于hadoop的hdfs文件系统,支持text、HFile、Parquet、RCFile等数据文件格式,供HIVE和Impala进行数据查询和数据落地使用。
基础分析工具12:本发明实施例考虑的是HIVE和Impala,主要用于查询数据存储中的数据,并返回输出结果。其中HIVE基于mapreduce框架,底层调用mapreduce来实现数据查询和输出。
数据优化装置13:数据优化装置为本专利发明实施例的核心部件,它由分析接口、分析执行计划、获取表名、查询条件、表大小、集群动态内存与生产执行路径、HIVE执行引擎、Impala执行引擎组成,装置运作的原理如下描述:
首先,分析接口提供jdbc的连接方式,主要用于接收应用发起的查询请求。
其次,分析接口将发起的查询语句交给HIVE解析器进行解析,然后分析生成的执行计划,获取的其中的操作数据表名字、操作的字段名和语句中的where查询条件。其中获取where查询条件信息中需明确查询条件对应的表,后期进行转换子查询使用,同时在解析时必须优先明确是否有分区字段作为查询条件,如果存在,那么分区字段将单独列出,而不是作为where条件。
接着,结合数据表中的统计信息,获取每个操作的表对应的数据文件大小,如果上一步的解析结果中包含分区表,那么在获取表对应的数据文件大小时只需获取的对应的分区文件大小,而不是全表文件大小。同时也需要获取当天整个hadoop集群的可用内存值,作为判断是使用HIVE进行查询还是使用Impala查询。
再次,是具体的逻辑判断,用于生成最终的执行路径,以当查询数据量小于集群可用内存80%时,Impala性能比HIVE性能高为依据,通过对比当前操作的数据表大小和集群可用内存大小,选择当前查询操作通过HIVE还是Impala执行。当操作的数据大小超过内存值时且存在where条件,那么还会根据前面解析出来的操作字段名和对应where条件进行一次查询语句的细化,先将where条件的数据进行过滤,取出有效数据生成临时表,再以此临时表代替原表进行下一轮的判断操作,不断递归,最终生成一个包含一个或者多个查询语句的执行路径计划。当然,这里面过滤后生成的临时数据表大小并不是实际执行,而是以HIVE和Impala生成的执行计划信息为依据,所以对表的统计信息收集在这个装置中尤为重要。
最后,根据上面生成的执行路径计划,通过调用HIVE和Impala执行引擎,按顺序一步步交由HIVE和Impala进行执行,最终返回输出结果。
图3作为基于图2所示的数据优化装置所执行的方法流程,对基于该装置执行的具体逻辑判断流程描述如下,包括:
步骤201、通过jdbc连接优化装置,发起查询请求。
步骤202、优化装置接收SQL语句。
步骤203、解析SQL语句。
步骤204、判断是单表查询还是多表关联查询,如果是单表查询,则转入执行步骤205,如果是多表查询,则转入执行步骤208。
步骤205、判断查询表数据量是否超过集群可用内存的80%,如果是,则执行步骤206,否则,执行步骤207。
步骤206、使用HIVE进行数据查询和结果输出。
步骤207、使用Impala进行数据查询和结果输出,转入执行步骤212。
步骤208、判断是否所有查询表大小总和小于集群可用内存80%,如果是,则执行步骤209,否则,转入执行步骤207。
步骤209、判断是否有where过滤条件的表,如果是,则执行步骤210,否则,执行步骤211。
步骤210、有where条件的表进行数据过滤作为新的查询表。
步骤211、使用HIVE进行数据查询和结果输出。
步骤212、返回查询结果。
以上流程说明了数据优化装置的运作流程,以下补充说明该装置优化执行路径的原理与使用的基础工具,优化执行路径主要依托HIVE的执行计划功能完成,HIVE的执行计划如下图4所示,从图4的一个语句执行计划实例中的用框线进行标识的部分可以看出(顺序依次往下),是通过HIVE执行计划获取到关键信息,包括:
1,alias:a操作处理的表名;
2,Num rows:269Data size:80782Basic stats该表根据统计信息得到的表的记录行数和表的文件大小;
3,(msisdn like'138%')该表是否进行条件过滤以及过滤具体信息;
4,Num rows:134Data size:40240Basic stats根据该过滤条件过滤后预计的表的记录行数和大小;
5,expressions:imsi(type:string),imei(type:string)最终输出的表的字段。
装置依赖以上关键信息组织优化语句执行路径;接下来,为了更好的理解本发明实施例,以下结合几个测试场景对装置的运作流程做出详细阐述:
集群环境为:集群4台服务器,每台服务器10G内存,其中空闲内存为8G,总可用内存为32G。表A记录数10w条,大小10G,表B记录数20w条,大小为20G,表C记录数40w条,大小为40G。
应用场景1:基于上述集群环境,用户发起一个单表的查询,语句为select A.*from A;根据上述图3所示的流程,基于数据优化装置所执行的方法流程,包括:
步骤301:客户端发起SQL查询需求;
步骤302:优化装置通过jdbc方式接收客户发起的查询需求;
步骤303:优化装置解析SQL语句;
步骤304:判断该SQL语句操作的表数量,当前操作表数量为1;
步骤305:判断该表的文件大小和当前集群可用内存空间大小,当前查询的A表文件大小为10G,小于集群可用内存的80%,即25.6G;
步骤306:生成最终执行计划,通过Impala对数据查询并返回最终查询结果。
应用场景2:基于上述集群环境,用户发起2个表的关联查询,语句为Select B.*,C.*from B left join C on B.col1=C.col1where B.col2like‘%test%’andC.col2like‘%test%’;
根据图5所示的流程,基于数据优化装置所执行的方法流程,包括:
步骤401:客户端发起SQL查询需求;
步骤402:优化装置通过jdbc方式接收客户发起的查询需求;
步骤403:优化装置解析SQL语句;
步骤404:判断该SQL语句操作的表数量,当前操作表数量为2;
步骤405:判断操作表总的的文件大小和当前集群可用内存空间大小,当前查询的B表加上C表的大小总和为60G,大于集群可用内存的80%,即25.6G;
步骤406:判断语句中是否有where条件,当前SQL对表B和表C都进行过滤;
步骤407:通过统计分析得知当前C表比B表大,先将C表根据where条件进行过滤生成执行计划,根据执行计划估算新生成的表C_1的文件大小,这里C_1大小为10G,将新生成的表C_1代替表C作为操作表;
步骤408:判断操作表总的的文件大小和当前集群可用内存空间大小,当前表B和表C_1的总大小为30G,大于集群可用内存的80%,即25.6G;
步骤409:判断语句中是否有where条件,由于C表已经用C_1表代替了,所以当前SQL只剩表B还有进行where过滤;
步骤410:将B表根据where条件进行过滤生成执行计划,根据执行计划估算新生成的表B_1的文件大小,这里B_1大小为10G,将新生成的表B_1代替表B作为操作表;
步骤411:判断操作表总的的文件大小和当前集群可用内存空间大小,当前表B_1和表C_1的总大小为20G,小于集群可用内存的80%,即25.6G;
步骤412:确定最终通过Impala查询输出结果。生成的最终执行计划为先将C表进行where条件过滤,由于C表为40G,大于集群可用内存的80%,即25.6G,故先使用HIVE进行数据过滤,生成临时表C_1,再将B表进行where条件过滤,由于B表为20G,小于集群可用内存的80%,即25.6G,故先使用Impala进行数据过滤,生成临时表B_1,最后将表B_1和表C_1通过Impala进行join查询生成最终数据结果。
上述应用场景,采用本发明实施例,主要包括1)整合HIVE、IMPALA两种分布式分析查询功能为分析工具。HIVE和Impala均是基于hdfs文件系统,均支持text、HFile、Parquet、RCFile等数据文件格式,为二者的无缝结合提供的存储层面的支撑。2)执行流程是本装置的核心部分,结合了处理的数据文件大小、数据表的统计信息、操作系统内存、集群的节点数、两次执行计划等信息。3)实现分布式存储和分布式查询,将中间数据保存到分布式文件系统上,提升数据的二次读写性能。采用本发明实施例,具有的优点包括:本发明实施例利用大数据分布存储和HIVE、Impala这两种大数据分析工具,将两者有机结合,充分发挥二者的优势,弥补了HIVE在处理小数据和Impala在处理大量数据上的性能不足。通过HIVE将海量数据进行提取,在分布式文件系统上生成新的数据文件,再使用Impala对小量数据进行业务查询,充分发挥HIVE和Impala在各自领域内的优势。
本发明实施例所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本发明实施例不限制于任何特定的硬件和软件结合。
相应的,本发明实施例还提供一种计算机存储介质,其中存储有计算机程序,该计算机程序用于执行本发明实施例的一种分布式系统中海量数据的查询方法。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (14)
1.一种分布式系统中海量数据的查询方法,其特征在于,所述方法包括:
对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务,以获取所述执行任务中的至少一个操作数据表对应的操作数据表名字、操作的字段名和语句中的查询条件;
判断所述执行任务是单表查询还是多表查询;当执行所述单表查询时,根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径;
当执行所述多表查询时,在满足数据过滤条件的情况下,对包含所述查询条件的操作数据表进行数据过滤以更新所述至少一个操作数据表,直至不满足所述数据过滤条件,根据所述执行任务中的数据文件大小和所述集群可用内存选择所述HIVE查询引擎或所述Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径,所述数据过滤条件为所述至少一个数据操作表的数据文件大小总和超过所述集群可用内存。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将查询请求需要的数据进行分布式存储。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述执行任务中的每个操作数据表对应的数据文件大小、集群可用内存大小。
4.根据权利要求1所述的方法,其特征在于,所述对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务,包括:
将用于表征业务分析需求的语句通过所述HIVE查询引擎对应的HIVE算法进行解析,分析生成的所述执行任务,获取所述执行任务中的操作数据表名字、操作的字段名和语句中的查询条件。
5.根据权利要求4所述的方法,其特征在于,根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径,包括:
当数据文件大小超过集群可用内存大小的预设阈值时,使用所述HIVE查询引擎对应的HIVE算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照HIVE算法执行数据查询和结果输出,生成所述新的执行路径;
当数据文件大小未超过集群可用内存大小的预设阈值时,使用Impala查询引擎对应的Impala算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照Impala算法执行数据查询和结果输出,生成所述新的执行路径。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较之前,结合每个操作数据表中的统计信息,获取到每个操作数据表对应的数据文件大小,如果通过所述HIVE算法进行解析得到的解析结果中包含分区表,则在获取操作数据表对应的数据文件大小时,只需获取对应的分区文件大小。
7.根据权利要求1所述的方法,其特征在于,所述对包含所述查询条件的操作数据表进行数据过滤,包括:
在所述包含所述查询条件的操作数据表的数据文件大小超过所述集群可用内存大小的预设阈值的情况下,通过所述HIVE算法对所述包含所述查询条件的操作数据表进行数据过滤;
在所述包含所述查询条件的操作数据表的数据文件大小未超过所述集群可用内存大小的预设阈值的情况下,通过所述Impala算法对所述包含所述查询条件的操作数据表进行数据过滤。
8.一种分布式系统中海量数据的查询装置,其特征在于,所述装置包括:解析单元和处理单元;其中,
所述解析单元,用于对收到的查询请求进行解析,以得到用于表征业务分析需求的语句所生成的执行任务,以获取所述执行任务中的至少一个操作数据表对应的操作数据表名字、操作的字段名和语句中的查询条件;
所述处理单元,用于判断所述执行任务是单表查询还是多表查询;当执行所述单表查询时,根据所述执行任务中的数据文件大小和集群可用内存选择HIVE查询引擎或Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径;
所述处理单元,还用于当执行所述多表查询时,在满足数据过滤条件的情况下,对包含所述查询条件的操作数据表进行数据过滤以更新所述至少一个操作数据表,直至不满足所述数据过滤条件,根据所述执行任务中的数据文件大小和所述集群可用内存选择所述HIVE查询引擎或所述Impala查询引擎对所述执行任务进行分布式查询,以生成所述执行任务中用于表征业务分析需求的语句对应的新的执行路径,所述数据过滤条件为所述至少一个数据操作表的数据文件大小总和超过所述集群可用内存。
9.根据权利要求8所述的查询装置,其特征在于,所述装置还包括:
存储单元,用于将查询请求需要的数据进行分布式存储。
10.根据权利要求8所述的查询装置,其特征在于,所述装置还包括:
获取单元,用于获取所述执行任务中的每个操作数据表对应的数据文件大小、集群可用内存大小。
11.根据权利要求8所述的查询装置,其特征在于,所述解析单元,还包括:
分析接口,用于将用于表征业务分析需求的语句通过所述HIVE查询引擎对应的HIVE算法进行解析;
分析执行任务子单元,用于分析生成的所述执行任务;
获取表名子单元,用于获取所述执行任务中的操作数据表名字和操作的字段名;
获取查询条件子单元,用于获取语句中的查询条件。
12.根据权利要求11所述的查询装置,其特征在于,所述处理单元,进一步用于:
当数据文件大小超过集群可用内存大小的预设阈值时,使用所述HIVE查询引擎对应的HIVE算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照HIVE算法执行数据查询和结果输出,以生成所述新的执行路径;
当数据文件大小未超过集群可用内存大小的预设阈值时,使用Impala查询引擎对应的Impala算法,结合所述操作数据表名字、操作的字段名和语句中的查询条件,并按照Impala算法执行数据查询和结果输出,以生成所述新的执行路径。
13.根据权利要求12所述的查询装置,其特征在于,所述处理单元,进一步用于将每个操作数据表对应的数据文件大小与集群可用内存大小进行比较之前,结合每个操作数据表中的统计信息,获取到每个操作数据表对应的数据文件大小,如果通过所述HIVE算法进行解析得到的解析结果中包含分区表,则在获取操作数据表对应的数据文件大小时,只需获取对应的分区文件大小。
14.根据权利要求8所述的查询装置,其特征在于,所述处理单元,进一步用于:
在所述包含所述查询条件的操作数据表的数据文件大小超过所述集群可用内存大小的预设阈值的情况下,通过所述HIVE算法对所述包含所述查询条件的操作数据表进行数据过滤;
在所述包含所述查询条件的操作数据表的数据文件大小未超过所述集群可用内存大小的预设阈值的情况下,通过所述Impala算法对所述包含所述查询条件的操作数据表进行数据过滤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610221574.0A CN107291770B (zh) | 2016-04-11 | 2016-04-11 | 一种分布式系统中海量数据的查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610221574.0A CN107291770B (zh) | 2016-04-11 | 2016-04-11 | 一种分布式系统中海量数据的查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107291770A CN107291770A (zh) | 2017-10-24 |
CN107291770B true CN107291770B (zh) | 2021-04-02 |
Family
ID=60093449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610221574.0A Active CN107291770B (zh) | 2016-04-11 | 2016-04-11 | 一种分布式系统中海量数据的查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107291770B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019308A (zh) * | 2017-12-28 | 2019-07-16 | 中国移动通信集团海南有限公司 | 数据查询方法、装置、设备及存储介质 |
CN108133050A (zh) * | 2018-01-17 | 2018-06-08 | 北京网信云服信息科技有限公司 | 一种数据的提取方法、系统及装置 |
CN108549683B (zh) * | 2018-04-03 | 2022-04-22 | 联想(北京)有限公司 | 数据查询方法以及系统 |
CN109271411B (zh) * | 2018-09-28 | 2023-08-29 | 中国平安财产保险股份有限公司 | 报表生成方法、装置、计算机设备及存储介质 |
CN110362404B (zh) * | 2019-06-28 | 2022-08-23 | 北京淇瑀信息科技有限公司 | 一种基于sql的资源分配方法、装置和电子设备 |
CN111125149B (zh) * | 2019-12-19 | 2024-01-26 | 广州品唯软件有限公司 | 基于Hive的数据获取方法、装置及存储介质 |
CN112256705B (zh) * | 2020-11-13 | 2022-11-01 | 北京理工大学 | 一种Gaia系统中的多表连接优化方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799622A (zh) * | 2012-06-19 | 2012-11-28 | 北京大学 | 基于MapReduce扩展框架的分布式SQL查询方法 |
CN104133858A (zh) * | 2014-07-15 | 2014-11-05 | 武汉邮电科学研究院 | 基于列存储的智能双引擎分析系统及方法 |
CN105045607A (zh) * | 2015-09-02 | 2015-11-11 | 广东创我科技发展有限公司 | 一种实现多种大数据计算框架统一接口的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2825764C (en) * | 2011-01-26 | 2021-11-02 | Viaforensics, Llc | Systems, methods, apparatuses, and computer program products for forensic monitoring |
-
2016
- 2016-04-11 CN CN201610221574.0A patent/CN107291770B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799622A (zh) * | 2012-06-19 | 2012-11-28 | 北京大学 | 基于MapReduce扩展框架的分布式SQL查询方法 |
CN104133858A (zh) * | 2014-07-15 | 2014-11-05 | 武汉邮电科学研究院 | 基于列存储的智能双引擎分析系统及方法 |
CN105045607A (zh) * | 2015-09-02 | 2015-11-11 | 广东创我科技发展有限公司 | 一种实现多种大数据计算框架统一接口的方法 |
Non-Patent Citations (4)
Title |
---|
主流大数据处理开源架构的分析及对比评测;方艾等;《电信科学》;20150731(第07期);第2015174-1到2015174-6页 * |
基于Hive和Impala的物流运力;任春华等;《物流技术》;20160131;第35卷(第1期);第124-126页 * |
基于Impala的大数据查询分析计算性能研究;郭超等;《计算机应用研究》;20150531;第32卷(第5期);第1330-1334页 * |
方艾等.主流大数据处理开源架构的分析及对比评测.《电信科学》.2015,(第07期),第2015174-1到2015174-6页. * |
Also Published As
Publication number | Publication date |
---|---|
CN107291770A (zh) | 2017-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107291770B (zh) | 一种分布式系统中海量数据的查询方法及装置 | |
JP5298117B2 (ja) | 分散コンピューティングにおけるデータマージング | |
US11003649B2 (en) | Index establishment method and device | |
US8949222B2 (en) | Changing the compression level of query plans | |
KR20210135535A (ko) | 질의 계획 내의 적응적 집계 연산자 및 속성 배치 | |
US11030196B2 (en) | Method and apparatus for processing join query | |
CN113360554B (zh) | 一种数据抽取、转换和加载etl的方法和设备 | |
JP7098327B2 (ja) | 情報処理システム、関数作成方法および関数作成プログラム | |
US9760604B2 (en) | System and method for adaptive filtering of data requests | |
CN110019308A (zh) | 数据查询方法、装置、设备及存储介质 | |
CN114356971A (zh) | 数据处理方法、装置以及系统 | |
CN108073641B (zh) | 查询数据表的方法和装置 | |
CN112182031B (zh) | 数据查询方法及装置、存储介质、电子装置 | |
CN112506887B (zh) | 车辆终端can总线数据处理方法及装置 | |
CN110909072B (zh) | 一种数据表建立方法、装置及设备 | |
CN113568931A (zh) | 一种数据访问请求的路由解析系统及方法 | |
CN115510139A (zh) | 数据查询方法和装置 | |
CN116049193A (zh) | 数据存储方法及装置 | |
CN115982230A (zh) | 数据库的跨数据源查询方法、系统、设备及存储介质 | |
CN116975126B (zh) | 数据查询方法、装置、计算设备和计算机可读存储介质 | |
CN113656469A (zh) | 大数据处理方法及装置 | |
CN111125108A (zh) | 基于Lucene的HBASE二级索引方法、装置及计算机设备 | |
CN117171227A (zh) | 一种基于Impala的任务统计方法和系统 | |
CN114461709A (zh) | 数据处理方法以及装置 | |
CN115033597A (zh) | 深度学习参与htap数据库执行sql优化的方法和系统 |
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 |