论文部分内容阅读
目前,在分布式系统中,业界和学术界对数据处理的实时性要求越来越高。离线计算对于批量处理虽然有着较大的优势,但对于流式数据的处理却表现的能力不足。近年来,出现了一系列的实时处理框架,包括Storm、Spark Streaming、S4、StreamBase等。然而,对基于这些框架的查询优化,目前在业界和学术界却鲜有研究。因此,本文提出了一个基于实时处理框架Storm的成本优化模型,用以提高在Storm上执行类SQL查询的处理效率。本文的研究重点是根据流式计算框架Storm的特点,提出一个基于成本的针对流式计算语言的优化模型。由于Storm是全内存操作,因此在计算其执行成本时,只考虑CPU的计算成本和节点间通信所带来的成本。本文针对连接查询和聚合查询两种操作分别定义了成本计算模型。对于连接查询采用基于哈希的两个数据流的连接算法。多连接操作中影响CPU成本的主要因素包括创建哈希的时间、左右数据流窗口中的元组数、算子选择率、获取一个元组花费的CPU时间等;影响通信成本的主要因素有节点的数据产生速率和算子的选择率。而对于聚合操作,影响成本的因素主要有窗口数据量的大小、窗口独立分组数以及元组在分组中分布偏移率。在本论文中,对流式查询语言、SQL的解析流程以及多连接查询优化的方法进行了调研,对基于成本的优化方式进行了深入研究。首先,根据流式数据的特点,设计能够处理流式数据的查询语言—SSQL,其与标准SQL语句相类似。滑动窗口的设计,使其能够较好地处理流式数据。其次,根据Storm的特性,抽象出一些物理算子,保证SSQL查询语句编译后能生成与Storm适配的物理查询计划。再次,完成对SSQL语言的解析,包括将SSQL语句解析为抽象语法树、生成逻辑查询计划、物理查询计划、提交Storm执行等多个步骤。在生成物理查询计划后,依据定义的成本模型,对每个查询计划进行成本计算,得到成本最小的查询计划,作为最终的执行计划,提交给Storm执行,将最后得到的结果返回给用户。最后,本文对定义的成本模型进行性能测试。设定了四个不同的查询任务和三个不同大小的滑动窗口,将每个任务在每个窗口上的执行时间与未优化的执行计划,以及查询引擎Squall中的优化器进行对比。实验表明,与Squall相比,本文优化器的性能平均提升了10.99%。