火花SQL是一个大数据处理结构化数据的查询和分析的工具。然而,由于火花的执行SQL,有多次中间数据写入磁盘,减少火花SQL的执行效率。针对现有的问题,我们设计和实现之间的一个中间数据缓存层底层文件系统和上层火花核心减少随机磁盘I / O的成本。通过使用查询系统论模块,我们可以动态调整的能力不同的查询缓存层。和分配模块可以为集群中每个节点分配适当的内存。根据火花的中间数据的共享SQL工作流程,提出了一种基于成本的相关合并算法,可有效减少冗余数据读写的成本。本文发展了SSO(火花SQL优化器)模块和集成到原始引发系统来实现上述功能。本文比较了与现有火花SQL查询性能通过实验数据生成的tpc - h的工具。实验结果表明,SSO模块可以有效地提高查询效率,减少磁盘I / O成本和充分利用集群内存资源。
的日益普及电子商务、社交网络、人工智能和其他新的互联网应用程序,存储和处理的数据量由政府、企业和研究机构已经急剧增加。变电站在电力系统生成每分钟100000报警数据,和Facebook每天产生超过400 TB的日志。这是一个紧急的问题,为企业和研究机构如此大规模数据存储在硬盘持续和检索所需的信息由用户在很短的时间内。数据存储和处理系统在大数据环境下近年来受到越来越多的关注。
早期的大数据处理系统主要是围绕Hadoop平台。为了解决这个问题,Hadoop平台经常读和写在HDFS中间数据,方法在内存中缓存Hadoop的洗牌数据提出了史等。
火花是一种高速的大数据处理引擎。它是基于抽样的实现(
引发生态球。
然而,火花的SQL系统目前面临两个问题。一个问题是,经常阅读和写作的中间数据之间的数据交互过程引发的任务导致严重的随机磁盘I / O的成本。中间文件的数量由一个简单的程序在火花图所示
波型火花洗牌的中间数据。
另一个问题是,没有合适的优化规则的工作流。火花工作中间数据相关性需要反复从磁盘读取相同的输入数据,导致冗余磁盘I / O的成本。
在上述背景下,本文旨在改善火花SQL的执行效率。主要贡献如下。
降低随机磁盘I / O成本在洗牌阶段通过添加火花核心层之间的一个中间数据缓存层和底层的分布式文件系统。
减少相同的中间数据的读/写成本之间的火花工作通过使用一个基于成本的相关合并算法,进一步提高数据分析系统的性能。
SSO(火花SQL优化器)原型系统的设计和发展。其系统结构如图
系统架构的SSO。
现有的火花在主从式系统运行。司机流程在主节点收到查询请求从客户端提交。工作进程在奴隶节点上执行特定的查询任务。SSO系统优化,改进了原来的火花,动态调整优化器模块添加名为动态调整优化器在主节点。火花的原始框架也修改为包括催化剂成本模型模块更名为SQL工作流优化器。阅读和写作对分布式内存文件系统接口的奴隶节点被添加到洗牌地图任务,慢慢减少。优化用户查询的过程通过SSO系统描述如下。
用户提交的查询是由解析器解析SQL工作流优化器模块组成一个逻辑执行计划。然后,优化执行计划提交给动态调整优化和DAG调度程序。动态调整优化计算的大小产生的中间数据优化SQL查询使用查询系统论模块。然后分配模块在缓存层分布式内存文件系统上执行缓冲区分配。最后,生成的工作流执行计划将提交任务分配DAG调度程序的奴隶节点。
在现有的火花系统中,数据之间的交互阶段会经常产生磁盘I / O开销。因此,缓存直接数据提出的策略。动态调整优化器是用于创建缓冲区大小不同的分布式内存文件系统动态SQL工作流不同的火花。随机磁盘I / O的成本将减少缓存洗牌洗牌阶段中间数据在内存中。
下面的查询执行过程分析显示当火花SQL将中间数据写入磁盘。查询语句是:
l_partkey、l_quantity l_extendedprice
lineitem,部分
p_partkey = l_partkey
和l_quantity < 40
分析表明,查询只包含一个连接操作。SQL查询的执行过程下火花图所示
火花的执行过程。
上述执行引发的过程分为三个阶段。阶段0读取一部分表和属性p_partkey上投影操作运行。阶段1读取lineitem表并执行投影操作的三个属性l_partkey, l_quantity l_extendedprice以及选择操作l_quantity < 40岁。第二阶段读0和1阶段的中间结果,执行连接操作p_partkey = l_partkey最后将查询结果写入磁盘。
这个查询的分析表明,该查询执行工作流的火花可以分为两个阶段。一是S-Stage投影、选择和聚合操作,另一种是J-Stage连接操作。
S-Stage,下面的规则可以用来计算输出数据在这个阶段的大小。
投影
选择
的价值
聚合
聚合操作返回的总和或平均价值属性,所以输出尺寸是可以忽略不计。
例如,图
查询执行的结果。
J-Stage,下面的规则用于计算这个阶段的输出数据大小。
如果没有联接条件
如果
如果
如果
频率分布直方图构造不同宽度的分布直方图
开始⟵attr1;结束⟵attr1;
马克斯⟵频率1;
结束⟵attr
马克斯⟵频率
开始⟵attr
马克斯⟵频率
构建不同宽度的分布直方图后,加入后的算法来计算总元组数算法所示
由直方图方法估计大小的连接操作
重叠⟵重叠两个直方图的桶;
templeft⟵
tempright⟵
和⟵和+ templeft∗tempright /重叠
算法的输入是关系的不同宽度的分布直方图
计算的总大小的缓存层后,接下来的问题是有多少内存分配给集群中的每个节点。由于火花数据局部性原理,当读取HDFS文件时,火花将分配数据存储最近的遗嘱执行人。对于存储多个输入数据的节点,应该分配更多的内存。输入数据在HDFS组织块,和一块的默认大小是128 MB。所以,在解析用户的查询语句来获取所需的表,有必要分析集群中的每个块的分布表。因为在HDFS中每个块的大小是一样的,内存大小
Q1查询之前提到过,Lineitem表的大小是7.2 GB包括60块。表的大小是233 MB包括两个街区。这些块的分布在集群如图
集群中的分配块。
在获得输入数据的分布在集群中,根据计算出的总大小的缓存层查询缓存层中的系统论模块和公式分配模块,每个节点所需的内存大小是790∗2/62≈25.48 MB, 790∗21/62≈267.58 MB, 790∗3/62≈38.22 MB, 790∗20/62≈254.83 MB, 790∗4/62≈50.96 MB, 790∗5/62≈63.71 MB。结果近似实际洗牌表中的数据
对比计算和实际调整大小。
| ID | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 一般任务 | 9 | 114年 | 14 | 119年 | 7 | 14 | 9 | 22 | 14 | 7 | 7 |
| 输入(MB) | 256年 | 2688年 | 384年 | 2560年 | 512年 | 384年 | 128年 | 128年 | 256年 | 640年 | 256年 |
| 计算调整大小 | 27 | 282.4 | 40.3 | 269年 | 53.81 | 40.35 | 13.45 | 15.05 | 28.03 | 67.25 | 29.06 |
| 实际调整大小 | 25 | 267.58 | 38.2 | 254.8 | 50.96 | 38.22 | 12.76 | 12.76 | 25.48 | 63.71 | 25.48 |
由于火花是一个基于内存计算框架,操作弹性分布式数据集洗牌之前或之后都是在内存中进行操作。集群是否有足够的内存,即使一定大小的内存空间分配了中间数据缓存层,剩余的内存足够的火花任务来执行计算。如果集群的内存资源有限,系统论的查询模块将计算洗牌的缓存大小之前查询运行时,通过缓存层和分配内存分配模块。这将导致占用内存洗牌操作之前执行。显然这不是一个合理的方法。缓存层分配模块采用延迟分配方案来解决这个问题。星火计划将尽可能多的内存分配给火花在non-Shuffle阶段工作。在洗牌阶段,火花工作不需要计算内存资源。然后在火花工作内存资源的一部分,剩下的内存资源集群中被称为中间数据缓存层。
SQL查询的优化过程的催化剂框架在传统的火花系统如图
SQL工作流优化器的框架。
执行火星任务的成本模型应该建立以合并火花任务中间数据相关性。然后合并的收益和额外的成本应该基于模型计算决定是否合并相比之下。
建立任务执行成本模型的火花,我们Singhal和辛格提出的改进方法
因为两个
在成本模型参数。
| 参数 | 意义 |
|---|---|
|
|
读/写数据的大小 |
|
|
寻找时间和旋转延迟时间 |
|
|
传输1 MB数据所需的时间 |
|
|
非本地数据数据总量的比例 |
|
|
的数量 |
| | |
阶段输入数据的大小 |
| | |
阶段输出数据的大小 |
|
|
在本地时间写1 MB的数据 |
|
|
时间1 MB数据传输网络 |
|
|
缓冲区大小的火星任务 |
阶段阅读阶段的成本
|
阶段的写作阶段的成本
每个任务阶段需要排序和合并所有产生的中间数据文件本身。如果一个|
假设的数量排序
为了合并中间数据,洗牌中间数据的格式是首次引入,然后共享字段合并算法。
火花的MapTask洗牌阶段提取所需的数据扫描源数据文件的每一行。然后它存储数据的键和值<键,值>双和输出到本地磁盘。工作第一阶段在图
tpc - h篮的查询执行流。
解析后的工作流程都是加入了减少任务的火花SQL。在MapTask阶段,从lineitem表读取的数据行,然后l_partkey保存为关键,l_quantity和l_extendedprice保存的值。在减少方便连接操作,实际表单的<键,值>对< l_partkey, l_quantity | l_extendprice | >。
同样,第三阶段在图
字段l_partkey出现在中间数据输出的第一阶段和第三阶段,作为一个关键和其他的价值。与此同时,l_quantity也出现在这两个阶段的价值。因为两个子查询只涉及连接和投影操作,没有选择操作,输出数据从阶段1和阶段3包含MapTask lineitem表中的所有行。可以认为,这两种类型的对包含所有l_partkey l_quantity lineitem表,这样他们就可以被合并。虽然合并减少写当前阶段的成本,也增加了阅读后续阶段的成本。例如,第二阶段加入表和lineitem表部分,但合并后读取意外l_suppkey字段。同样,第五阶段加入供应商表和lineitem表,但合并后读取意外l_extendedprice字段。因此,保存的写作成本字段和阅读成本增加的字段应该在洗牌重来确定是否合并中间数据。这个问题可以通过共享字段合并算法来解决。
假设阶段的SQL语句
测量了写作的好处字段和字段的阅读成本增加,成本模型的定义
我们验证了SSO系统的性能在这一节中。测试数据生成的tpc - h基准测试工具。查询语句的一部分提供的tpc - h被选中来测试这个系统的性能在两个部分:中间数据缓存合并测试和中间数据关联算法测试。
硬件环境如下。实验集群10包括一个主节点和子节点。节点通过千兆以太网连接。每个节点配置了2.7 GHz CPU(8核16个线程,20 m缓存,涡轮频率),64 GB的DDR3 1600和500 GB SAS机械硬盘。
至于软件环境,操作系统使用的头节点和奴隶节点Centos6.7。每个节点安装JDK 1.8.0, Hadoop 2.6.0,引发2.0.1和Scala魅惑。实验中使用的编程语言开发Java和Scala。IDE是在开发环境中使用。
这里使用的实验数据集被tpc - h基准测试工具生成的。TPC - h是一个标准数据库管理系统性能测试由TPC(美国事务处理性能委员会),一个非营利性的组织。它可以用来模拟业务应用程序环境在现实生活中,被广泛用于评估决策支持系统的综合性能。使用命令生成的测试数据
在完成内存分配的火花洗牌在每个节点缓存层,选择几个具有代表性的查询在tpc - h Q1, Q5,网上购物的时候,问题19。Q1和问题19大的输入数据和更少的中间数据。Q5,你校的时候有更少的输入数据和更大的中间数据。查询程序提交给SSO系统和原引发体系,和查询执行时间被记录。实验结果如图所示
比较实验前后中间数据缓存。
Q5结果表明,网上购物的时候他们的中间数据远远大于输入数据,中间数据缓存层可以解决高的问题随机磁盘
磁盘的变化
磁盘
内存使用情况的比较。
通过合并相同的中间数据字段,生成中间数据的大小可能会进一步降低,从而减少内存使用的中间数据缓存层。来验证算法的有效性,在这一节中,选择篮的tpc - h查询提交给SSO系统和原来的火花SQL系统分别。同时,不使用中间数据相关性合并算法,原始火花SQL系统在两种情况下进行了测试:使用中间数据缓存层。查询执行时间被记录下来,如图
中间数据相关性测试合并算法。
结果表明,SSO系统和火花SQL的执行时间和中间数据缓存层既短比火花SQL系统没有任何优化,而前两个系统的执行时间往往是相同的。为了比较这两个系统中,每个节点使用的缓存大小的监测结果见表
缓存大小的比较有和没有合并中间数据关联算法。
| Id | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 输入数据(MB) | 256年 | 896年 | 384年 | 1024年 | 1792年 | 1664年 | 640年 | 384年 | 256年 | 640年 | 256年 |
| 引发缓冲区(MB) | 227年 | 792.2 | 340年 | 908.8 | 1590年 | 1476年 | 568年 | 340.8 | 227.2 | 568年 | 227.2 |
| SSO缓冲区(MB) | 178年 | 625.8 | 268年 | 715.2 | 1251年 | 1162年 | 447年 | 268.2 | 178.8 | 447年 | 178.8 |
缓存的使用SSO系统合并中间数据关联算法比火花的SQL系统在每个节点没有优化算法。这是因为通过共享相同的字段l_partkey l_quantity,中间1.5 GB的数据可以减少和写作的数据导致磁盘成本19.2秒。冗余读取字段l_extendedprice和l_suppkey也生成。阅读1.26 GB的数据引起的磁盘
成熟的内存计算框架,火花,代表内存计算框架,吸引了越来越多的注意力从企业和研究小组。数据分析师和引发系统之间的桥梁,火花SQL扮演重要的角色。优化火花SQL查询的性能,提高了现有火花SQL和SSO原型系统的开发。通过添加火花洗牌中间数据缓存层,高磁盘
所有数据用于支持本研究的结果包括在本文中。
作者宣称没有利益冲突。
这项工作是公司支持的科技项目叫做“通用组件的关键技术的研究和应用的新一代电网调度控制系统平台,”协同创新中心和部分支持的新的软件技术和无线通信技术的工业化和协同创新中心。