大数据环境下的文旅多维数据分析系统设计与开发

2021-06-25 11:10陈永海
电子测试 2021年4期
关键词:驾驶舱度量引擎

陈永海

(北海职业学院,广西北海,536000)

1 问题分析

随着中国传统技术产业发展结构的调整和新技术的应用,文化进行旅游服务产业突破了传统的产业管理模式,逐渐演变为一种新的多向、多层次、多维度的产业。在数据多维分析的领域中,传统的统计分析软件,如:IBMSPSS,只针对样本量较小、结构简单的特定数据进行统计分析,不适用于对大批量、结构复杂的大数据进行深层次分析。在大数据的分析处理中,Apache Hive作为数据仓库提供查询计算接口;Apache Kylin在面对固化型多维分析场景时,即分析的需求和要统计的指标十分明确,其采用数据预计算技术来提高响应速度;针对探索式多维分析场景时,即分析需求尚不明确,分析员需要不断尝试分析过程,此时Spark SQL可以实时计算数据,并快速响应数据。虽然针对不同场景存在多种数据分析工具,但是当前基于多场景文化旅游的大数据分析平台也面临着以下的问题:具有各自的适用场景,不能同时满足多种不同查询计算需求;同时涵盖分布式数据分析全生命周期的应用匮乏。

2 基于文旅数据混合查询引擎设计与实现

在大多数情况下,基于预计算的Apache Kylin的查询效率要远高于Spark SQL查询,但是Kylin遇到具体记录的查询和cuboid不存在的情况,它的查询效率会远低于Spark SQL。在实际的业务场景中,存在以下问题:

(1)Spark SQL和Kylin都有各自适应的场景和优缺点,单一的引擎不能同时满足多种场景需求。

(2)多种查询引擎并存,业务人员每次都需要判断使用哪种查询分析引擎,缺乏统一的路由策略进行自动判断选择。

(3)统一的查询引擎需要混合多种引擎,但是它们拥有不同的执行框架,解析过程也不完全相同。

针对以上的问题,本文设计了混合查询引擎,实现自动路由选择最佳的查询引擎,提高查询的效率。

2.1 查询引擎路由策略

在多维分析中,用户输入信息会被转化为SQL语句,因此用户输入信息中需要包含SQL语句抽象语法树的基本单元要素,在逻辑语法树中的Aggregate、Filter、GroupBy、Table与用户输入形成相应的映射关系。同时在Kylin项目中也存在相应的概念,Kylin中可以使用多张数据表(Table)并选定计算维度(Dimension)和统计度量(Metric)构建不同的数据模型(Model),该模型只是逻辑模型,没有进行真正执行。在模型的基础之上,我们再选取出部分维度和度量形成数据立方体(Cube),进行真正的统计计算。Kylin元数据中的Metric、Dimension、Cube和Model与SQL语句抽象语法树基本要素以及用户输入存在对应关系,这为通过用户输入来统一判断路由到Kylin、SparkSQL或HiveSQL提供了逻辑基础。

Kylin中的数据立方体的元数据是由Metadata Manager模块进行管理的,存储在HBase之中,本文通过该模块获取元数据信息与用户输入进行匹配,匹配规则如下:

(1)用于计算的维度和度量全部包含于某个Kylin数据立方体的维度和度量之中,该查询使用Kylin查询。

(2)用于计算的维度和度量不全包含于任何一个Kylin数据立方体中,该查询使用SparkSQL执行具体的查询计划。

(3)如果进行的是明细查询,根据数据存储位置不同可能会使用SparkSQL或HiveSQL去执行查询计划。

(4)Kylin查询失败,重新选择到SparkSQL进行查询。

2.2 统一SQL生成策略

多维查询是用户通过界面创建的,系统只能获得用户选择的维度和度量等计算信息,所以系统需要提供自动生成SQL的功能。由于本系统会路由选择多个查询引擎去执行SQL语句,不同引擎的对SQL语句语法、词法解析验证的细节不尽相同,因此我们设计实现一个统一的SQL生成策略生成不同的SQL以适配不同的执行引擎。在基于文旅数据多维分析系统中,我们选取了SELECT语句来进行查询计算,由于Spark SQL(Hive SQL)和Kylin SQL语法树结构相同,因此按照常用的查询需求和SQL语句语法树结构我们将SELECT语句划分成八个子句模块。每个子句模块可以根据用户输入和查询100引擎类型生成相应的SQL语句片段,最后统一生成适配执行引擎计算的SQL语句。

3 基于文旅多维数据分析系统设计与实现

本文基于Kylin、Spark、Hive等开源大数据组件,研究并实现一种开源的基于多场景文化旅游的大数据多维分析系统,按照功能将系统划分为五个子模块,包括数据预处理子模块、Kylin建模子模块、图表构建子模块、图表管理子模块、驾驶舱管理子模块。系统模块图如图1所示。

图1 大数据环境下的文旅多维数据分析系统模块图

3.1 构建数据预处理子模块

由于数据来源比较广泛,对于原始数据来说,还不能完全达到分析的要求,存在数据缺失,重复,错误等问题,在本模块中提供丰富的数据清洗算子、数据集成算子以及统计分析算子完成数据处理的工作。

(1)数据清洗主要涉及到的操作包括去除重复值,忽略字段,填充空值,条件筛选,数据分段,记录排序,类型转换,新增序号列,字符替换,数值运算等;

(2)数据集成合并多源多表数据,包含的主要操作有多表关联,数据追加;

(3)统计分析,即初步统计数据特征,宏观发现数据问题,如最大最小值计算,以便发现数据取值范围,除此之外,该部分的原子操作还包括均值、方差、频率统计、正态检验、相关系数矩阵等。

3.2 构建Kylin建模子模块

本系统集成了Kylin建模模块,可以通过添加配置完成Kylin集群建模页面的集成。在本模块中可以新建多个项目,每个项目可以建立多个Model,每个Model都是对事实表和多张维度表构建起来的多维统计逻辑模型。在Model之上根据经常组合使用的维度和度量构建出数据立方体(Cube),进行执行计算。Cube的计算逻辑过程如下:

(1)根据Cube定义的事实表以及维度表,利用Hive创建一张宽表;

(2)抽取事实表上维度的distinct值,将事实表上的维度以字典树方式压缩编码成目录,将维度表以字典树的方式编码;

(3)利用125MapReduce从第一步得到的宽表文件作为输入,创建N-Dimension cuboid,然后每次根据前一步的结果串行生成N-1cuboid,N-2cuboid…0-cuboid;

(4)根据生成的Cuboid数据量计算HTable的Region分割策略,创建HTable,将HFile导入进来。

根据本模块集成的Kylin配置页面进行数据建模,首先在创建和生成数据Cube之前,需要从Hive中导入表结构,其次选择事实表、维度表以及其中的维度和度量创建数据模型,最后在模型基础之上选择执行计算的维度和度量并设置优化等,等待Cube计算结果,完成Cube创建。在优化设置中可以设置强制维度(Mandatory dimension)和衍生维度(Derived dimension)来加速Cube的构建流程。

3.3 构建图表构建子模块

本模块主要完成多维分析图表的构建,用户通过拖拽维度和度量进行多维分析,是整个基于多场景文化旅游大数据多维分析系统的核心部分。构建图表构建子模块包含计算引擎路由、统一SQL生成、计算引擎执行器以及图表生成五个部分:

(1)计算引擎路由是根据用户选择的数据表、数据维度和数据度量来选择最为合适的底层计算引擎。

(2)统一SQL生成是为了适配不同的执行引擎设计,并实现一个统一的SQL生成策略,使得根据计算引擎路由模块的结果生成不同的SQL以便执行。

(3)计算引擎执行器主要是提供统一的计算引擎查询入口。在本文基于多场景文化旅游的分析中,涉及到的执行引擎有Spark、Kylin以及Hive,在本模块中向上下模块屏蔽了执行引擎的差别,提供一个统一的SQL执行与任务提交的接口,同时不同的计算引擎的执行结果会用相同的数据结构存储(List)返回,以便下游模块使用。

(4)图表生成,主要提供将数据转化成图表的功能。根据多维分析的维度和度量,转化成适合前端展示的一维类图表、二维类图表或者多维类图表。

3.4 构建图表管理子模块

构建图表管理子模块主要实现对用户构建出来的图表进行维护管理,主要包含了图表修改以 及图表删除,图表修改包括了图表配置更新以及图表切换。图表配置更新包括图表样式修改,图表联动设置,图表实时设置等;由于本系统支持的图表类型比较多,因此舍弃效率为N:N的一对一转换方案,而是根据旧图表内容及其类型提取其中的数 据统一格式的中间数据,然后按照新图表类型生成新图表数据,借助统一格式的中间数据实现N:1:N复杂度图表转换。

3.5 构建驾驶舱管理子模块

构建驾驶舱管理子模块由多张图表构成,通过自定义的拖拽方式可以自由组合图表,包括指标卡,多维表格,地图,标准图表等多种样式,不同图表组合成的驾驶舱,有着近乎无数种排列组合,具有整体主题意义的驾驶舱可以令用户从各个角度观察数据的表现。主要包括了驾驶舱的新建、修改、删除、以及实时驾驶舱和多图联动等功能。实时驾驶舱主要是实现当数据更新变化时,自动计算新的图表数据并更新驾驶舱。本文中主要使用WebSocket完成前后端实时内容推送,根据WebSocket链接本模块维护了一个实时驾驶舱列表,通过数据源监控模块监控数据源的改变,当数据发生变化时,由驾驶舱对应的更新频率配置触发实时图表的重新计算,其中涉及到的计算引擎执行器模块和图表生成模块已在上文图表构建子模块中设计实现,计算完成后更新图表,并通知驾驶舱页面有数据更新成功,重新调用驾驶舱查询接口,按照最新图表重组驾驶舱呈现给用户。

多图联动主要是实现当点击一个图表中某个数值时,其它联动的图表在该维度特定值的限定下重新计算图表。由于本系统按照模块化设计的准则,多图联动主要复用图表构建子模块功能,按照新的限定条件重启构建流程,构建出来的新的图表作为该驾驶舱的唯一副本,因此并不对其它驾驶舱和图表展示产生任何影响。

4 结论

本文提出了一种可以自动适配Kylin、Spark、Hive多种查询引擎的方案,支持通过用户在界面上选择的分析维度与度量,自动路由到最优执行引擎去查询。同时实现了基于多场景文化旅游的大数据多维分析系统,提供全生命周期的一站式数据服务,数据从数据接入经历数据清洗、数据建模、数据分析到可视化呈现,闭环涵盖数据业务全流程。对大数据分析的普及与应用具有非常重要的现实意义。

猜你喜欢
驾驶舱度量引擎
鲍文慧《度量空间之一》
模糊度量空间的强嵌入
迷向表示分为6个不可约直和的旗流形上不变爱因斯坦度量
跟踪导练(三)
蓝谷: “涉蓝”新引擎
走进客机驾驶舱
跟踪导练(四)3
地质异常的奇异性度量与隐伏源致矿异常识别
无形的引擎
基于Cocos2d引擎的PuzzleGame开发