旅客行程数据即席查询系统及方法
【技术领域】
[0001] 本发明涉及数据处理技术,尤其涉及一种旅客行程数据即席查询系统及方法。
【背景技术】
[0002] 开源分布式文件系统(Hadoop Distributed File System,HDFS)是一个开源分布 式系统基础架构,由Apache基金会所开发。用户可以在不了解分布式底层细节的情况下,开 发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop的框架最核心的设计就 是:HDFS和MapReduce. HDFS为海量的数据提供存储,而MapReduce为海量的数据提供计算。
[0003] Impala是一种开源准实时分布式大数据查询组件,可提供对标准SQL数据查询语 句的解析,并按照解析结果从HDFS进行数据的获取。
[0004] 即席查询是指用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的 选择生成相应的统计报表。即席查询与普通应用查询最大的不同是普通的应用查询是定制 开发的,而即席查询是由用户自定义查询条件的。
[0005]在民航领域中,航空公司、机场、代理人、民航局、审计署、公检法等各行业内外的 组织和个人对旅客行程的数据均有大量的统计分析需求。
[0006] 为了能将旅客行程相关数据充分利用,首先需要将旅客出行各环节中的分散信息 进行清洗和整合,为每一位旅客的每次出行,建立详细的行程记录并存储在一张数据表中。 四年多的旅客行程数据,总记录数可达15亿条,单表占用近500G存储空间,字段数70多个, 而且数据量还会以每天300至400M的规模增加,伴随着中国民航的发展,每日数据量还将以 10%-15%的速度按年递增。而在对这种覆盖多年历史的时间范围内,单表细粒度化的旅客 行程海量数据上,对其查询使用主要体现出以下几个特点:
[0007] a.查询条件不确定:由于旅客行程数据统计需求多样化,查询条件不能预估,用户 在提交查询条件时,呈现出典型的即席查询的特征。
[0008] b.查询数据粒度细:用户对旅客行程数据进行查询时,常常要求获得全部时间范 围中最细粒度的返回结果,极端要求下可能是15亿条记录中的一条记录。
[0009] c.查询维度多:旅客一次出行的行程数据包含了旅客本身的身份、航空公司、代理 人等多维度多角度的信息,目前已有70多种维度,未来将扩充至上百种维度。因此,用户常 需要一次性获取几十到几百种的维度信息,以全方位对行程记录进行评价分析。
[0010] d.可扩展性与低成本:旅客行程的数据量在不断的增长,数据维度也在不断的增 加,在低成本的要求下能做到几十台服务器集群的线性扩展。
[0011] 现有传统关系型数据仓库在这样的单表海量数据情况下,不能很好的同时解决以 上四个问题,由于不可能预料到所有查询的条件、返回的数据粒度和维度,关系表无论怎样 优化,都可能会造成执行某些查询时,数据返回时间过长,进而达到不同用户的秒级返回结 果的交互性使用要求。
[0012] 随着大数据时代的到来,通过低成本开源软件自主构建查询系统,从数据中实时、 高效地分析和挖掘出有价值的信息,已经逐渐成为处理海量数据的一种有效方式。
【发明内容】
[0013] 为解决现有存在的技术问题,本发明实施例提供一种旅客行程数据即席查询系统 及方法。
[0014] 为达到上述目的,本发明实施例的技术方案是这样实现的:
[0015] -种旅客行程数据即席查询系统,所述系统包括:数据接收调度模块、数据存储模 块、查询引擎模块和应用接口模块,其中,
[0016] 数据接收调度模块,用于调用所述查询引擎模块创建分区表和压缩分区表;以及, 用于接收旅客行程数据,调用所述数据存储模块并将所述旅客行程数据加载入数据存储模 块,并通过调用查询引擎模块将旅客行程数据加载入所述分区表,再从所述分区表中读出 直接加载入所述压缩分区表;
[0017] 数据存储模块,用于作为分布式文件系统存储旅客行程数据;
[0018] 查询引擎模块,用于创建分区表和压缩分区表,与所述数据存储模块进行耦合,基 于所述分区表和/或压缩分区表完成旅客行程数据的查询;
[0019] 应用接口模块,用于为前端应用提供接口,以及调用查询引擎模块进行旅客行程 数据的查询;
[0020] 其中,数据存储模块采用开源分布式文件系统HDFS,所述查询引擎模块采用 Impala0
[0021] 其中,所述分区表配置的元数据类型,包括:分区字段、数据文件中字段间隔符号、 存储格式、数据在所述HDFS上的位置;所述压缩分区表配置的元数据类型,包括:分区字段、 数据文件中字段间隔符号、压缩格式。
[0022] 其中,所述数据接收调度模块,具体用于:
[0023] 根据旅客行程数据的格式特征,调用查询引擎模块创建分区表和压缩分区表,其 中,采取按日分区的策略;
[0024] 旅客行程数据定时自动传送到数据接收调度模块所在服务器的固定位置后,在判 断数据到达时,通过调用数据存储模块的客户端程序,将旅客行程数据加载入数据存储模 块的特定位置;
[0025] 通过调用查询引擎模块的客户端程序,将旅客行程数据加载入所述分区表,然后 再从所述分区表中读出直接加载入所述压缩分区表。
[0026] 其中,所述HDFS包括名字节点NameNode和数据节点DataNode;
[0027] 所述HDFS的名字节点,用于记录旅客行程数据的位置、大小、在各数据节点中存储 的位置;
[0028] 所述HDFS的各个数据节点,用于将所述旅客行程数据的数据文件以文件块的形式 存储,文件块的大小由配置参数指定,同时配置每个文件块的冗余份数,并自动复制到其他 数据节点上。
[0029] 其中,所述查询引擎模块采用的Impala包括三个组件:Impala Daemon(Impala守 护进程)、Impala Statestore(Impala模式存fi者)、Impala Catalog Service(Impala目录月艮 务);
[0030] 所述Impala Daemon,以Impalaed进程存在,包括查询计划器、查询协调器和查询 执行器,所述查询计划器接收由所述应用接口模块提交的SQL查询请求,并基于所述分区表 或压缩分区表的元数据对所述SQL查询请求进行解析,生成执行计划;查询协调器把多个执 行计划分配到各个查询执行器并行执行,以从所述HDFS的各数据节点上获取旅客行程数据 并返回;
[0031 ] 所述Impala Statestore,以Statestored进程存在,用于收集分布在HDFS集群中 各个节点的CPU/内存/网络资源,完成一次查询中多个任务分片的调度;以及,用于把所述 Impala Catalog Service对于所述分区表和/或压缩分区表中元数据的更新推送到各个 Impalad 进程;
[0032] 所述Impala Catalog Service,以Catalog进程存在,用于接收针对所述分区表 和/或压缩分区表中元数据的查询和更新操作,同时把更新结果发送给所述Statestored进 程并通过其推送到各个Impalaed进程。
[0033] 其中,所述应用接口模块包含:命令行接口、网页接口、以及基于驱动服务器的接 □ 〇
[0034] 其中,所述旅客行程数据以航空公司航班控制管理系统中成行的旅客订座记录 (PNR,Passenger Name Record)的旅客数据为基准,结合使用航空公司电子票系统的旅客 订票数据,以及使用航空公司离港系统的旅客数据;所述旅客行程数据的数据粒度达到旅 客航段级。
[0035] -种旅客行程数据即席查询方法,所述方法包括:
[0036] 数据接收调度模块调用查询引擎模块创建分区表和压缩分区表;
[0037] 数据接收调度模块接收旅客行程数据,调用数据存储模块并将所述旅客行程数据 加载入数据存储模块,并通过调用查询引擎模块将旅客行程数据加载入所述分区表,再从 所述分区表中读出直接加载入所述压缩分区表;
[0038]数据存储模块作为分布式文件系统存储所述旅客行程数据;
[0039]应用接口模块为前端应用提供接口,调用查询引擎模块进行查询;
[0040] 查询引擎模块与所述数据存储模块进行耦合,基于所述分区表和/或压缩分区表 完成旅客行程数据的查询;
[0041] 其中,数据存储模块采用开源分布式文件系统HDFS,所述查询引擎模块采用 Impala0
[0042] 其中,所述分区表配置的元数据类型,包括:分区字段、数据文件中字段间隔符号、 存储格式、数据在所述HDFS上的位置;所述压缩分区表配置的元数据类型,包括:分区字段、 数据文件中字段间隔符号、压缩格式。
[0043] 其中:所述数据接收调度模块根据旅客行程数据的格式特征,调用查询引擎模块 米取按日分区的策略创建分区表和压缩分区表;
[0044] 旅客行程数据定时自动传送到所述数据接收调度模块所在服务器的固定位置后, 所述数据接收调度模块在判断数据到达时,通过调用数据存储模块的客户端程序,将旅客 行程数据加载入所述数据存储模块的特定位置;
[0045] 通过调用所述查询引擎模块的客户端程序,将所述旅客行程数据加载入所述分区 表,然后再从所述分区表中读出直接加载入所述压缩分区表。
[0046] 其中,所述HDFS包括名字节点NameNode和数据节点DataNode;
[0047] 所述