一种QL脚本的解析模块的分析研究
所属栏目:电子技术论文
发布时间:2014-08-19 14:36:12 更新时间:2014-08-19 14:59:11
QL脚本在设计方面,充分考虑了与现有数据库查询语言SQL相结合的特点,QL脚本无疑可以被看作是对数据库查询语句SQL的一种转型和衍生。
摘要:作为MapReduce系统的核心组件的脚本解析模块,它是分布式云计算平台实现的基础。该模块的实现是基于脚本编程接口,在此过程中使用的语言是QL(Query Language)。QL脚本通过脚本解析模块实现解析之后,事件执行模块则由参数通过配置事件的方式一一实现。下面就这种脚本语言的实现过程作了详细的分析。
关键词:核心期刊征稿,MapReduce,脚本解析,QL,事件配置
An Analysis of Parsing Module QL Script
CHEN Hao
(Guangdong Technical College of Water Resources and Electric Engineering, Computer Information Engineering, Guangzhou 510925, China)
Abstract:MapReduce system as a core component of the script parsing module, which is the basis for a distributed cloud computing platform implementation. The module is based on the realization scripting interface, the language used in this process is QL (Query Language). After the QL script by script parsing module for parsing, event execution module configured by the parameters of events come true. The following detailed analysis of the implementation process of this scripting language.
Key words:MapReduce; script parsing; QL; event configuration
1 QL脚本的设计理念
基于对现有技术的可扩展性和覆盖性分析,使用QL脚本来定义关键词的过程能够适应市场上各种网络流量统计的不同类型,当然必须对设计过程中对关键词的灵活扩展性作以充分性的考虑,以便于后期对QL脚本的扩容升级,更好的支撑云计算平台的综合应用。
2 QL脚本模块的分析
QL脚本模块解析可以分为以下几大模块:解析引擎(ScritEngine)、脚本语句解释器(ScritParser)、比较运算模块(Compare)、算术运算模块(Arithmetic)、逻辑运算模块(ExpressionEngine)、聚合运算模块(Aggregate)、字段运算模块(Field)、配置模块(Configuration)等。图1是QL脚本解析模块的整体结构图。
QL脚本解析的实现过程如下:系统的入口为 ScriptEngine,它的功能是读取QL语言脚本,并将脚本逐行传递给脚本解析器。脚本解析器按照每行的QL语言脚本首字母对语句进行分类,根据不同语句的类别调用不同的解释模块对语句进行解析。语句解析逐行进行,如脚本中含有子句等其他复杂句型,脚本解析器会调用其他的处理模块,如调用聚合运算模块对脚本进行相应的处理。
3 配置文件的定义及解析过程
一个完整的QL语言脚本包括配置文件、原始数据文件、输出结果保存位置和统计执行语句。模块在运行时,首先需要对配置文件进行解析以获取数据格式,然后对输入数据和输出数据路径进行解析,最后解析统计执行语句,并将解析的命令传递给作业执行模块。
编写QL语言脚本时,首先应指定配置文件,指明要处理的数据格式。配置文件的格式如下:列序号、名称、描述、数据类型。根据配置文件中的格式,系统对输入数据进行匹配,从而对指定列序号的数据进行操作。配置文件支持如下的关键词:
表1 配置文件关键词列表[关键字\&功能\&ResetColumn语句\&用于重新载入列配置文件,切换不同的配置文件\&createColumn语句\&用于创建一个新的配置文件,并载入这个配置文件\&AddColumn语句\& 对当前的配置文件进行增加列的操作\&]
如上表所示,目前配置文件中共支持三个关键词,分别为:ResetColumn用于重新载入列配置文件,可用于切换不同的配置文件。CreateColumn用于在当前脚本中创建一个新的配置文件。AddColumn对当前的配置文件进行增加列的操作。
4 关键词解析
QL语言中的关键词指的是在每一句QL脚本句首的单词,每个语句的功能由此关键词来确定,在解析时脚本解析模块会根据该关键词来进行下一步的判断。目前QL语言支持的关键词为:Process,Select,Count,CountD如下表所示。
表2 脚本关键词列表
[分类\&关键字\&功能简介\&分组聚合统计\&Process\&对各分组求集合函数值\&选择字段\&Select\&选择字段、字串、表达式输出结果\&多重计算\&Count\&同时对多个逻辑表达式计数\&去重计算\&Countd\&对指定字段去重计算\&]
1) Process 语句 功能介绍:提供统计各分组内的聚合函数运算结果的功能。Process语句支持多种表达式,表达式中必须包含有函数。且支持多种子句:where 子句、groijpby 子句、order by 子句、tofile 子句,having 子句' limit 子句。
在脚本解析时,Process类接收以"Process"开头的一行脚本,从后往前寻找各个子句,并将该行脚本切割为各个子句,创建子句解释类的对象处理各个子句。 Process语句脚本解析过程按照从后往前的顺序解析子句。解析完成后,将所需信息封装起来,通过作业配置的方法,传给作业执行模块。
2) Select 语句
功能介绍:用于选择某列或多列输出。提供选择某个字段、多个字段四则运算或字段运算的功能。
Select语句类关系与Process的类似,按照从后往前的顺序解析子句。Select语句支持多重输出功能,语句中可通过花括号指定多重输出条件和输出文件名。解析完成后,将所需信息封装起来,通过作业配置的方式,传入作业执行模块。
3) Count 语句
功能介绍:提供同时计数多个值的功能。
Count语句设计为同时计数多个值的功能。Count后可跟多个逻辑表达式,在一次读取数据的同时,计数满足各个表达式条件的记录数。
4) CountD 语句
功能介绍:提供对指定字段的去重计数功能。
CountD语句支持where子句,group by子句和tofile子句。CoimtD语句的主要功能是以符合where指定条件的话单为对象,按照groipby分组,对CountD指定的字段进行去重计数。
以上的QL关键词只是定义了该语句的功能范围,实际统计的任务需要其他运算逻辑语句来组成更为复杂的操作。全部的关键词都支持算术运算,包含加减乘除四种运算,并且可以使用括号定义运算优先级。当没有括号时,将从左到右进行计算,乘除运算优先于加减运算。
5 事件执行模块
事件执行模块的功能是接收脚本解析模块传递过来的参数,根据参数选择不同的Map和Reduce类,并配置和提交统计事件到Hadoop框架。事件执行模块内的各模块基本都遵循Hadoop的Map Reduce框架的接口定义。主要任含以下几个模块:输入输出模块、Map模块、Partition模块、Combine模块和Reduce模块。
事件执行过程示意图如下:
图2 事件执行过程示意图
每一行语句可解释为一个可执行的MapReduce的事件,事件执行组件配置好事件后提交给Hadoop的JobTracker,由Hadoop的 Map Reduce框架执行事件,Map模块读取原始数据分块,Partition模块和Combine模块对Map模块输出的统计结果进行合并处理,最后提交给Reduce模块最终输出至HDFS。
1) 输入输出模块
输入模块负责读入文件分片并将其分割成记录,适用于读取流记录这种半结构化文件。本模块的输入为网络流量记录文件,输出为统计任务的键/值对,主键为本条记录在文件中的字节偏移量,值为流量记录值。本模块只用于读取半结构化的文本文件,输入模块输出的键/值对,通过引用传递给Map模块。
输出模块根据指定的字段分隔符和行分隔符输出结果。本模块与输入模块类似,可以将记录以行的形式存入文本文件中。其输入为Reduce模块产生的键/值对。输出为最终结果文件,存储在HDFS上。
2) Map 模块
Map模块的功能为从整条网络流量记录中取出指定字段,经过提取、计算等操作后,产生键/值对,并将统计的初步结果写到计算机本地磁盘。Map模块继承了 Hadoop框架的Map模块,并根据处理的网络流量记录格式进行了一些定制。
根据统计功能的不同,目前系统包含如下两个Map部件:GrovpMapper和CountMapper。GroipMapper用于处理分组后的集合统计,分组条件作为主键,Map端集合运算结果作为值进行输出。CountMapper用于处理多重计数的统计需求。Map模块的输入为输入模块输出的键 /值对,Map模块对相同的主键的键值进行合并处理后,输出新的键/值对,键为分组的条件,值为该分组对应的值。
3) 数据分割模块(Partition)
Partition模块继承了 Hadoop框架定义的Partition模块。利用该模块,系统将Map输出的结果进行初步划分,可以保证某一取值范围的中间结果送到同一个 Reduce任务中进行处理。划分时采用对key进行hash运算的方式,在保证正确性的同时一定程度上简化Reduce的过程。划分的个数是由用户自定义的Reduce任务的个数。
4) 数据合并模块(Combine)
Combine模块用于计算机本地中间文件的合并。该模块通常运行在Reduce操作前,对之前模块的结果中相同主键的键/值对进行合并。Combine模块的处理步骤与Reduce的操作是相似的,但是 Combine模块通常在Map模块运行后进行,它的出现可以有效的减少集群内的数据传输。因为在Map Reduce运行的过程中,Map模块和Reduce不一定在同一运算节点进行,该模块可以将Map输出的结果进行初步合并,减少输入至Reduce模块的文件大小。
5) Reduce 模块
Reduce模块继承了 Hadoop框架定义的Reduce模块,实现的功能是对前一模块统计的中间结果进行合并,输出最终结果。处理流程为:Map模块的中间结果被 Combine模块和Partition模块处理以后,存入运算节点的本地磁盘临时文件内。集群主节点通知Reduce模块去对应的运算节点读取文件。目前系统所有Map模块生成的中间结果都按主键值被Hash函数分成N份(N是系统用户指定的Reduce数量),N个Reduce任务分别负责不同的主键取值区间。因此,所有的Reduce任务需要按照主键的取值范围去对应的节点读取Map输出的中间结果,并将其形成键/值的列表。读取后,再次按照主键进行合并,并进行函数计算、算术运算、逻辑运算等操作。最终由输出模块将最终的键/值对输出到HDFS。
5 结束语
QL语言设计目的是能让了解该语言的普通用户,即使在完全不懂JAVA编程技能的情况下,能够在云计算平台系统上进行分
布式计算。因为作为开源项目的Hadoop为用户提供了众多的JAVA编程接口,但是很多用户并不具备编写完整程序的能力,而且针对不同的分析任务都编写相应的程序成本较高。通过QL语言可以较好的解决这一难题,用户只要在掌握基本的语法的情况下即可实现分布式的云计算。
参考文献:
[1] 万至臻.基于MapReduce模型的并行计算平台的设计与实现[D].杭州:浙江大学,2008.
[2] 谢桂兰.基于Hadoop MapReduce模型的应用研究[J].微型机与应用,2010,4.
[3] 陈香香.云计算中MapReduce性能优化及应用[D]. 重庆:重庆大学,2011.